2011-04-14 115 views

回答

10

不需要你需要Q_OBJECT来定义你想要的信号/插槽,此外需要包含正确的标题。

QObject api docs

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

请查看Qt文档中的各种示例以获取更多详细信息和示例代码。 Signals and Slots参考是一个很好的看看。另请参阅Object Model参考。

+0

感谢您的回复。如果可能,你能否详细解释一下这个问题? “你需要Q_OBJECT来定义你想要的信号/插槽的类定义?”谢谢 – Simplicity 2011-04-14 09:53:50

+0

@ user588855:增加了更多的细节和信息链接。 – Mat 2011-04-14 09:58:43

+1

请阅读Mat链接的Q_Object文档。甚至在该文档中列出了一个示例类,它显示了如何使用Q_OBJECT宏。 – CadentOrange 2011-04-14 09:58:52

3

它们被用于两个不同的目的。

Q_OBJECT

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

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

#include<QObject>

这是用来包括qobject.h头文件,这样就可以使用可用的功能在类QObject ..说的如QObject::connect()

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