我正在开发一个使用cmake的基于Qt的项目。我生成的所有moc文件都名为*.moc
,但我有一些文件,其生成的moc文件的名称为moc_*.cpp
,而不是*.moc
。为什么会发生这种情况以及如何修复这些文件。
修改
我想说这些类是继承自QObject并且有Q_OBJECT和Q_DECLARE_PUBLIC宏,除非有.moc,否则它们不会与我一起编译。
我必须在.cpp文件中包含.moc文件。
- 让我变得疯狂的事情是我有一个相同的类(与我的类相同的实现),它生成一个.moc但是我的类生成了moc _ * .cpp。
答案 0 :(得分:2)
在每个使用Q_OBJECT的情况下,您不必包含* .moc文件。 .moc文件仅为在.cpp文件中声明的类生成。在其他情况下,moc会生成moc _ * .cpp,其中包含基于Q_OBJECT的类。你没有什么可担心的。从您的cpp文件中删除* .moc包含。例如:
的main.cpp
class E: public QObject
{
Q_OBJECT
};
moc将生成要包含在main.cpp中的main.moc文件
另一个例子
class.h
class E: public QObject
{
Q_OBJECT
public:
void member();
};
class.cpp
#include "class.h"
void E::member()
{
}
moc将生成包含class.h的moc_class.cpp,并且是单独的编译单元