Qt - Q_OBJECT vs. #include <QObject>

Qt - Q_OBJECT vs. #include <QObject>

本文关键字:lt QObject gt #include vs OBJECT Qt      更新时间:2023-10-16

使用Q_Object宏和#include <QObject>有相同的效果吗?换言之,它们是否是用于相同目的的两种不同方式?

谢谢。

否。在类定义中,除了包含正确的标头外,还需要Q_OBJECT来定义您想要的信号/插槽。

来自QObject api文档:

请注意,Q_OBJECT宏对任何对象强制实现信号、插槽或属性您还需要运行源上的元对象编译器文件我们强烈建议使用的所有子类中的该宏QObject,无论是否它们实际上使用信号、插槽和属性,因为不这样做可能引导某些功能展示奇怪的行为。

只需查看Qt文档中的各种示例即可获得更多详细信息和示例代码。Signals and Slots参考资料是一个很好的地方。另请查看"对象模型"引用。

它们用于两种不同的用途。

Q_OBJECT:

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

如果要使用信号、插槽和其他元对象功能,则需要有Q_OBJECT宏。

#include<QObject>:

这用于包含qobject.h头文件,以便您可以使用类QObject中可用的函数。。比如说QObject::connect()

要使用Q_OBJECT宏,必须使用#include <QObject>

否。您可以将此宏添加到从QObject派生的类中。但正如马特所说,你仍然需要头球!看见http://doc.qt.io/qt-5/qobject.html#Q_OBJECT