Dan*_*tos 9 c++ qt introspection moc
为什么在Qt cpp源代码中添加.moc文件的包含很重要?
这是几个Qt样本中常用的步骤,包括这个:http: //doc.qt.io/qt-5/qttestlib-tutorial1-example.html ; #include"testqstring.moc"行应该包含在文件的末尾.
我不明白为什么这是必要的.
谢谢.
pep*_*ppe 23
如果您在文件中QObject使用Q_OBJECT宏定义子类,则必须这样做.cpp.当你这样做时:
qmake必须在您的内部生成规则Makefile以调用moc该.cpp文件.
那个特殊的(hackish?)包含会触发qmake这样做,并在你的调用时告诉它哪个是moc输出文件(teststring.moc).cpp.
为了编译moc输出(仍然是一堆C++代码),编译器必须看到你的类定义.否则,它会抱怨没有类似的东西YourClass::staticMetaObject,因为它不知道YourClass存在.
通常,一个定义Q_OBJECT头文件中的类.moc然后#include "header.h"在其生成的输出中添加一个,这意味着moc可以愉快地编译输出.
但是如果你的类定义在一个内部.cpp呢?你不能#include一个.cpp文件moc的输出,因为这将让你重新定义吨的错误.
相反,你#include moc在你的输出.cpp,所以它被编译在一起,每个人都很高兴.(这意味着qmake只会发出一条规则要运行moc,而不是另一条规则告诉编译器编译moc输出.)
从2.你也可以假设Q_OBJECT在a .h中定义类不需要任何特殊的包含.
| 归档时间: |
|
| 查看次数: |
8652 次 |
| 最近记录: |