खोज…
टिप्पणियों
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
को घोषणा के रिवर्स ऑर्डर के साथ कॉल कर सकते हैं जो स्वचालित विनाश को तोड़ देगा ।