我正在开发一个使用 cmake 的基于 Qt 的项目。我生成的所有 moc 文件都名为 *.moc
,但我有一些文件,其生成的 moc 文件的名称为 moc_*.cpp
,而不是 *.moc
。为什么会发生这种情况以及如何修复这些文件。
编辑:
我想说这些类继承自 QObject,并具有 Q_OBJECT 和 Q_DECLARE_PUBLIC 宏,除非有 .moc,否则它们不会与我一起编译。
我必须将 .moc 文件包含在我的 .cpp 文件中。
- 让我发疯的是,我有一个相同的类(与我的类相同的实现)生成 .moc,但我的类生成 moc_*.cpp。
最佳答案
您不必在每次使用 Q_OBJECT 时都包含 *.moc 文件。 .moc 文件仅为在 .cpp 文件中声明的类生成。在其他情况下,moc 会生成 moc_*.cpp,其中包含基于 Q_OBJECT 的类。你没有什么可担心的。从 cpp 文件中删除 *.moc 包含内容。例如:
main.cpp
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并且是单独的编译单元
关于qt - 生成的 moc 名称不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11678106/