I always thought that every class subclassing QObject must contain this macro but this is not completely right. More precisely it is only required if meta-object code has to be produced by the moc tool in order to use the signals and slots mechanism, the run-time type information, the dynamic property system and translating features for internationalization.

Beside that the methods metaObject() and inherits() from QObject as well as className() and newInstance() from QMetaObject also require it.

However the Qt developers strongly recommend that Q_Object is used by every subclass of QObject no matter what of the above features they actually use, also if none is used.