3

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

编辑:

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

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

- 让我发疯的事情是我有一个相同的类(与我的类相同的实现)生成一个 .moc 但我的类生成 moc_*.cpp。

4

1 回答 1

2

您不必在每次使用 Q_OBJECT 时都包含 *.moc 文件。.moc 文件仅为在 .cpp 文件中声明的类生成。在其他情况下, moc 会生成 moc_*.cpp ,其中包含您自己的基于 Q_OBJECT 的类。你没有什么可担心的。从您的 cpp 文件中删除 *.moc 包含。例如:

主文件

class E: public QObject
{
    Q_OBJECT
};

moc 将生成 main.moc 文件以包含在 main.cpp 中

另一个例子

类.h

class E: public QObject
{
     Q_OBJECT
public:
     void member();
};

类.cpp

#include "class.h"

void E::member()
{
}

moc 将生成 moc_class.cpp 包含 class.h 并且是单独的编译单元

于 2012-07-27T11:36:39.117 回答