Q_OBJECTmacros是做什么的? 为什么所有的Qt对象都需要这个macros?

我刚开始使用Qt,并注意到所有示例类定义都将macrosQ_OBJECT作为第一行。 这个预处理macros的目的是什么?

从Qt文档 :

元对象编译器moc是处理Qt的C ++扩展的程序。

moc工具读取一个C ++头文件。 如果它发现一个或多个包含Q_OBJECTmacros的类声明,它将生成一个包含这些类的元对象代码的C ++源文件。 其中,信号和插槽机制,运行时间types信息和dynamic属性系统需要元对象代码。

它只是告诉预编译器,这个类有gui元素,需要通过'moc'运行,只需要将它添加到使用信号/插槽机制的类中即可。
但是在其他任何课程中都会被忽略 – 这只会增加构build时间。

MOC(元对象编译器)将Q_OBJECTmacros包含的头文件转换为C ++等效的源代码。 它基本上控制信号插槽机制,并使C ++编译器可以理解

Q_OBJECTmacros必须出现在声明自己的信号和插槽的类定义的私有部分中,或者使用由Qt的元对象系统提供的其他服务。