No relevant classes found. No output generated、metaObject连接错误

本文探讨了在使用VS2017、Qt5.14.1和特定插件编译工程时遇到的警告问题,重点在于中文路径导致的编译难题,以及如何通过修改编码和清理MOC文件来解决。

自己用VS 2017 + Qt 5.14.1 + qt-vsaddin-msvc2017-2.4.1-rev.12.vsix 编写的工程编译时,报如下警告:

Note: No relevant classes found. No output generated

然后生成的moc开头的文件都是空的,即0 KB,然后报一堆:metaObject连接错误 

以下是网友说的解决方法:

QT文件的编码和VS内原工程编码不一致。QT文件是Unicode的一种,而VS原工程为 GB2312。

解决办法:

  用VS的“高级保存选项”功能将 QT复制过来的文件 更改编码为 GB2312,重新编译;

  发现 moc_***.cpp 中出现代码,且代码正常;

  问题解决。

以下是另一个解决方法:Note:Norelevantclassesfound.Nooutputgenerated._湖北荆楚闲人_新浪博客

这两种方法都没解决我的问题,后来发现是工程目录路径中含有中文,将中文目录改为英文,然后全部删除生成的moc开头的文件,重新编译工程,问题解决。

在使用 QXorm 进行编译时,如果遇到提示 `No relevant classes found. No output generated.`,通常表明 Qt 的元对象编译器(moc)未能识别到任何需要处理的类。这可能与类定义、文件编码、文件名一致性或包含路径等多个因素相关。 ### 问题分析与解决方法 1. **确保类继承自 QObject 并使用 Q_OBJECT 宏** QXorm 基于 Qt 的元对象系统,因此所有需要参与序列化或数据库映射的类都必须继承自 `QObject` 并在类定义中使用 `Q_OBJECT` 宏。 ```cpp class MyDataClass : public QObject { Q_OBJECT QX_REGISTER_FRIEND_CLASS(MyDataClass) // QXorm 注册 public: MyDataClass(QObject *parent = nullptr); ~MyDataClass(); QString name; int id; }; QX_REGISTER_HPP(MyDataClass, qx::trait::no_base_class_defined, 1) ``` 如果类未正确继承或缺少 `Q_OBJECT` 宏,moc 将无法生成相应的元对象代码,从而导致该提示[^4]。 2. **检查文件编码格式** Qt 的 moc 工具对文件编码较为敏感,尤其是带有 BOM 的 UTF-8 编码文件可能导致解析失败。建议将 `.h` 和 `.cpp` 文件保存为 **UTF-8 无 BOM** 或 **ASCII** 编码格式。 3. **确保头文件与源文件名一致** moc 通过匹配 `.h` 和 `.cpp` 文件名来处理元对象。如果文件名不一致(如 `myclass.h` 与 `myclassimpl.cpp`),可能导致 moc 无法找到对应的类定义,从而生成空的 moc 文件。 4. **避免在头文件中嵌套包含其他头文件** 头文件的嵌套包含可能导致预处理器展开顺序异常,从而影响 moc 的解析。应尽量在源文件中包含依赖头文件,或使用前向声明(forward declaration)来减少头文件依赖。 ```cpp // 不推荐在头文件中嵌套包含 #include "module_def.h" ``` 推荐改为在 `.cpp` 文件中包含所需头文件,或使用相对路径确保包含正确[^2]。 5. **确认 QXorm 注册宏正确使用** QXorm 要求使用特定宏来注册类和成员变量。确保使用了 `QX_REGISTER_HPP` 和 `QX_REGISTER_CPP` 宏,并在 `.cpp` 文件中调用 `QX_REGISTER_CPP`。 ```cpp // mydataclass.cpp QX_REGISTER_CPP(MyDataClass) ``` 6. **重新运行 qmake 或清理构建缓存** 在修改了类定义或 moc 相关设置后,应重新运行 qmake 或清理构建缓存以确保 moc 文件被正确生成。 ```bash qmake -r ``` 或者在 Visual Studio 中选择“清理解决方案”并重新构建。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值