qt - 生成的 moc 名称不正确

标签 qt qt4 cmake qobject metaobject

我正在开发一个使用 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/

相关文章:

c++ - Qt:使用另一个参数创建一个新类

c++ - 使用线程编程

qt - 在QDesigner的中心设置小部件

qt - 如何在 Qt 中检索堆栈跟踪或设备崩溃日志?

python - 使用 cmake 构建 Python 共享对象绑定(bind),这取决于外部库

c++ - 阻止写入 C++ Qt Qt5.0 中的控制台

javascript - Qt 5.12 QML,在javascript中通过var选择QML对象

c++ - Qt 中的 Tab 键顺序

iphone - CMake 和 XCode : "cannot find interface declaration for ' NSObject'"

c++ - 如何将 C++17 stdc++fs 库链接到混合语言(C++ 和 Fortran)CMake 项目?