खोज…


टिप्पणियों

QObject क्लास सभी Qt ऑब्जेक्ट्स के लिए बेस क्लास है।

QObject उदाहरण

Q_OBJECT मैक्रो किसी वर्ग के निजी अनुभाग में दिखाई देता है। Q_OBJECT को Q_OBJECT उपवर्ग का होना QObject । यह मैक्रो वर्ग को अपने संकेतों / स्लॉटों को घोषित करने और क्यूटी मेटा-ऑब्जेक्ट सिस्टम का उपयोग करने के लिए आवश्यक है।

यदि मेटा ऑब्जेक्ट कंपाइलर (MOC) Q_OBJECT साथ वर्ग पाता है, तो यह इसे संसाधित करता है और मेटा ऑब्जेक्ट स्रोत कोड युक्त C ++ स्रोत फ़ाइल उत्पन्न करता है।

यहाँ Q_OBJECT और सिग्नल / स्लॉट के साथ क्लास हेडर का उदाहरण दिया गया है:

#include <QObject>

class MyClass : public QObject
{
    Q_OBJECT

public:

public slots:
    void setNumber(double number);        

signals:
    void numberChanged(double number);

private:
} 

qobject_cast

T qobject_cast(QObject *object)

जो से पाने द्वारा जोड़ा जाता है एक कार्यक्षमता QObject और का उपयोग कर Q_OBJECT मैक्रो का उपयोग करने की क्षमता है qobject_cast

उदाहरण:

class myObject : public QObject
{
    Q_OBJECT
    //...
};

QObject* obj = new myObject();

यह जाँचने के लिए कि क्या obj एक myObject -type है और इसे C ++ में इस तरह डालना है कि आप आम तौर पर एक dynamic_cast उपयोग कर सकते हैं। यह संकलन के दौरान RTTI सक्षम होने पर निर्भर है।

दूसरी ओर Q_OBJECT मैक्रो रूपांतरण-चेक और कोड उत्पन्न करता है जिसका उपयोग qobject_cast में किया जा सकता है।

myObject* my = qobject_cast<myObject*>(obj);
if(!myObject)
{
    //wrong type
}

यह RTTI से संबंधित नहीं है। और आपको डायनामिक लाइब्रेरी सीमाओं (Qt इंटरफेस / प्लगइन्स के माध्यम से) में भी कास्ट करने की अनुमति देता है।

QObject लाइफटाइम और ओनरशिप

QObjects मूल C ++ के कच्चे, अद्वितीय या साझा किए गए पॉइंटर्स की तुलना में अपने स्वयं के वैकल्पिक जीवन भर की अवधारणा के साथ आते हैं।

QObjects के पास माता-पिता / बाल संबंधों की घोषणा करके एक ऑब्जेक्ट्री बनाने की संभावना है।

इस संबंध को घोषित करने का सबसे सरल तरीका निर्माणकर्ता में मूल वस्तु को पारित करना है। एक lternative के रूप में आप मैन्युअल रूप से एक की मूल सेट कर सकते हैं QObject फोन करके setParent । इस संबंध को घोषित करने की एकमात्र दिशा यही है। आप एक बच्चे को माता-पिता की कक्षा में नहीं जोड़ सकते, लेकिन केवल दूसरे तरीके से।

QObject parent;
QObject child* = new QObject(&parent);

जब parent अब स्टैक-लेड child को हटा देते हैं, तो उन्हें भी हटा दिया जाएगा।

जब हम एक QObject हटाते हैं, QObject यह "अपंजीकृत" स्वयं मूल ऑब्जेक्ट बन जाएगा;

QObject parent;
QObject child* = new QObject(&parent);
delete child; //this causes no problem.

स्टैक चर के लिए एक ही लागू होता है:

QObject parent;
QObject child(&parent);

स्टैक- parent दौरान parent - parent से पहले child को हटा दिया जाएगा और स्वयं को उसके माता-पिता से अपंजीकृत कर लिया जाएगा।

नोट: आप मैन्युअल रूप से setParent को घोषणा के रिवर्स ऑर्डर के साथ कॉल कर सकते हैं जो स्वचालित विनाश को तोड़ देगा



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow