4

使用Q_Object宏和#include <QObject>有同样的效果吗?换句话说,它们是出于同一目的的两种不同方式吗?

谢谢。

4

3 回答 3

11

不,除了包含正确的标题之外,您还需要Q_OBJECT在类定义中定义您想要信号/插槽的东西。

QObjectapi 文档

请注意,对于任何实现信号、槽或属性的对象,Q_OBJECT 宏都是必需的。您还需要在源文件上运行 Meta Object Compiler。我们强烈建议在 QObject 的所有子类中使用此宏,无论它们是否实际使用信号、槽和属性,因为不这样做可能会导致某些函数表现出奇怪的行为。

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

于 2011-04-14T09:52:19.293 回答
3

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

Q_OBJECT

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

如果你想使用信号、槽和其他元对象特性,你需要有Q_OBJECT宏。

#include<QObject>

这用于包含 qobject.h 头文件,以便您可以使用类中可用的功能QObject。例如,QObject::connect()

并且要使用Q_OBJECT宏,您必须#include <QObject>.

于 2011-04-14T09:59:09.563 回答
0

不,您将此宏添加到派生自QObject. 但是你仍然需要 Mat 所说的标题!见http://doc.qt.io/qt-5/qobject.html#Q_OBJECT

于 2011-04-14T09:54:32.790 回答