Beneath Q_OBJECT and signals/slots
The Qt building system should be clearer now. Still, the Q_OBJECT
macro and the signal/slot/emit keywords are still black boxes. Let's dive into Q_OBJECT
. You can Ctrl + click on the macro name, or select it and press F2 to go to its declaration.
The truth lies in the source code; Q_OBJECT
is defined in the qobjectdefs.h
file (in Qt 5.7):
#define Q_OBJECT \ public: \ // skipped details static const QMetaObject staticMetaObject; \ virtual const QMetaObject *metaObject() const; \ virtual void *qt_metacast(const char *); \ virtual int qt_metacall(QMetaObject::Call, int, void **); \ QT_TR_FUNCTIONS \ private: \ // skipped details qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
This macro defines some static functions and static QMetaObject
. The body of these static functions is implemented in the generated moc
file. We will not drown you in the gory details of the QMetaObject
class. The role of this class...