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 ...

Get Mastering Qt 5 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.