Qt - Q_OBJECT vs. #include <QObject>
Qt - Q_OBJECT vs. #include <QObject>
使用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
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 删除 QSharedPointer 指向的 QObject
- QObject::连接无法将信号连接到*this*对象的插槽
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- QML/C++/QObject Struct Copy
- QObject::d eleteLater在我的Qt测试中没有像预期的那样调用
- 具有 QObject 继承的单例 - Qt
- QObject::连接不起作用 - 使用函数语法找不到信号
- 是否可以在单独的线程中将 QObject 设置为 QML 上下文属性?
- 智能指针作为 QObject::d eleteLater() 的替代品
- Shiboken2 qobject.h:46:10:致命:找不到'QtCore/qobjectdefs.h'文件
- 如何显式调用运算符<<
- 在 dll 中为 qLibrary 编译 qobject 时出错
- 将复制构造函数设置为默认值在继承自 QObject 时不起作用
- 我应该使用多个角色还是一个角色,将实际属性推迟到将数据包装/公开为其属性的QObject
- 在另一个线程上发出 QObject 信号的正确方法?
- 为什么 QObject::d isconnect(const QMetaObject::Connection &connection) 采用 const 参数并打算修改它?