我刚开始使用Qt并注意到所有示例类定义都将宏Q_OBJECT作为第一行.这个预处理器宏的目的是什么?
Mar*_*ett 17
它只是告诉预编译器这个类有gui元素,并且需要通过'moc'运行,你只需要将它添加到使用signal/slot机制的类中.
但它会在任何其他类中被忽略 - 它只会增加构建时间.
小智 8
MOC(元对象编译器)将包含Q_OBJECT宏的头文件转换为C++等效源代码.它基本上控制了信号槽机制,使C++编译器可以理解
小智 5
1 来自元对象系统的Qt 文档
moc 工具读取 C++ 源文件。如果它找到一个或多个包含 Q_OBJECT 宏的类声明,它会生成另一个 C++ 源文件,其中包含每个这些类的元对象代码。这个生成的源文件要么 #include 到类的源文件中,要么更常见的是编译并与类的实现链接。
2 来自Q_OBJECT 的Qt 文档
Q_OBJECT 宏必须出现在声明自己的信号和槽或使用 Qt 元对象系统提供的其他服务的类定义的私有部分中。
3 来自moc 的Qt 文档
moc 工具读取 C++ 头文件。如果它找到一个或多个包含 Q_OBJECT 宏的类声明,它会生成一个 C++ 源文件,其中包含这些类的元对象代码。其中,信号和槽机制、运行时类型信息和动态属性系统需要元对象代码。
4 来自信号和插槽的Qt 文档
Q_OBJECT 宏由预处理器展开,声明几个由 moc 实现的成员函数;如果您遇到“未定义对 LcdNumber 的 vtable 的引用”这样的编译器错误,您可能忘记了运行 moc 或在链接命令中包含 moc 输出。
| 归档时间: |
|
| 查看次数: |
69991 次 |
| 最近记录: |