生成的moc名称不正确

时间:2012-07-26 21:10:18

标签: qt qt4 cmake qobject metaobject

我正在开发一个使用cmake的基于Qt的项目。我生成的所有moc文件都名为*.moc,但我有一些文件,其生成的moc文件的名称为moc_*.cpp,而不是*.moc。为什么会发生这种情况以及如何修复这些文件。

修改

  • 我想说这些类是继承自QObject并且有Q_OBJECT和Q_DECLARE_PUBLIC宏,除非有.moc,否则它们不会与我一起编译。

  • 我必须在.cpp文件中包含.moc文件。

- 让我变得疯狂的事情是我有一个相同的类(与我的类相同的实现),它生成一个.moc但是我的类生成了moc _ * .cpp。

1 个答案:

答案 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,并且是单独的编译单元