Qt - Q_OBJECT与#include <QObject>的区别

4
< p >使用Q_Object宏和#include <QObject>是否有相同的效果?换句话说,它们是实现相同目的的两种不同方式吗?< /p > < p >谢谢。< /p >
3个回答

11
不行。你需要在想要使用信号/槽的类定义中加入Q_OBJECT,除了已经包含正确头文件之外。
QObject API文档中可以看到: 请注意,对于任何实现信号、槽或属性的对象,Q_OBJECT宏都是强制性的。您还需要在源文件上运行元对象编译器。我们强烈建议在所有QObject的子类中使用此宏,无论它们是否真正使用信号、槽和属性,因为不这样做可能会导致某些函数表现出奇怪的行为。
只需查看Qt文档中的各种示例,以获取更多详细信息和示例代码。可以参考Signals and Slots参考和Object Model参考。

谢谢您的回复。如果可能的话,您能否更详细地解释一下“您需要在希望使用信号/槽的类定义中添加Q_OBJECT”这句话的含义?谢谢。 - Simplicity
1
请阅读Mat提供的Q_Object文档。该文档中甚至列出了一个示例类,展示了如何使用Q_OBJECT宏。 - CadentOrange

3
他们用于两个不同的目的。 Q_OBJECT:
Q_OBJECT宏必须出现在类定义的私有部分中,该类定义声明其自己的信号和槽或使用Qt元对象系统提供的其他服务。
如果你想使用信号、槽和其他元对象特性,你需要有Q_OBJECT宏。
#include:
这是用来包含qobject.h头文件的,这样你就可以使用类QObject中可用的函数。例如,QObject::connect()。
要使用Q_OBJECT宏,你必须#include。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接