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的元对象系统提供的其他服务。

  • 为什么不使用exception处理?
  • 编译时QVision Widget错误
  • 无法导入PyQt4.QtGui
  • 如何在Qt Creator中configurationCDB?
  • 如何从QList中删除元素,而使用foreach迭代呢?
  • 无法在模拟器中启动AVD:未findQT库
  • 混合Qt和Boost
  • 如何在Qt Creator中连接菜单点击和操作?
  • 内存pipe理在Qt中?
  • 全屏部件
  • 如何在QMake .pro文件中指定不同的Debug / Release输出目录