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
.
The truth lies in the source code; Q_OBJECT
is defined in the file qobjectdefs.h
(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 a 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 is to store all the metainformation for the QObject
subclass. It also maintains a correspondence...