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

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

4 Solutions collect form web for “Q_OBJECTmacros是做什么的? 为什么所有的Qt对象都需要这个macros?”

从Qt文档 :

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

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

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

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

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

  • Qt:* .pro和* .pri
  • GUI开发:Qt vs GTK
  • selectWPF / C#和Qt / C ++
  • 如何在Qt,GCD风格的给定线程中执行函数或lambda?
  • 什么时候应该使用Q_OBJECT?
  • 程序入口点__gxx_personality_v0找不到
  • 在接口类中声明抽象信号
  • 无法导入PyQt4.QtGui
  • QImage和QPixmap有什么区别?
  • 单击时在QWidget上绘制矩形叠加层
  • 在Qt中添加额外的编译器选项