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