栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

VS2019+QT ERROR:LNK2001 public: virtual struct QMetaObject const

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VS2019+QT ERROR:LNK2001 public: virtual struct QMetaObject const

网上随便找了一个QT的小程序源码,编译时报错,

严重性	代码	说明	项目	路径	文件	行	禁止显示状态
错误	LNK2001	无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl MainWindow::metaObject(void)const " (?metaObject@MainWindow@@UEBAPEBUQMetaObject@@XZ)	EasyOCRApp	E:vQtEasyOCRAppEasyOCRApp	E:vQtEasyOCRAppEasyOCRAppmainwindow.obj	1	
错误	LNK2001	无法解析的外部符号 "public: virtual void * __cdecl MainWindow::qt_metacast(char const *)" (?qt_metacast@MainWindow@@UEAAPEAXPEBD@Z)	EasyOCRApp	E:vQtEasyOCRAppEasyOCRApp	E:vQtEasyOCRAppEasyOCRAppmainwindow.obj	1	
错误	LNK2001	无法解析的外部符号 "public: virtual int __cdecl MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindow@@UEAAHW4Call@QMetaObject@@HPEAPEAX@Z)	EasyOCRApp	E:vQtEasyOCRAppEasyOCRApp	E:vQtEasyOCRAppEasyOCRAppmainwindow.obj	1	
错误	LNK2001	无法解析的外部符号 "public: static struct QMetaObject const MainWindow::staticMetaObject" (?staticMetaObject@MainWindow@@2UQMetaObject@@B)	EasyOCRApp	E:vQtEasyOCRAppEasyOCRApp	E:vQtEasyOCRAppEasyOCRAppmainwindow.obj	1	
错误	LNK1120	4 个无法解析的外部命令	EasyOCRApp	E:vQtEasyOCRAppx64Debug	E:vQtEasyOCRAppx64DebugEasyOCRApp.exe	1

原因是qmake没有执行相应的moc指令。

问题是:要怎样才能让vs2019调用qmake呢?我查了一下,每一个QT继承类我都加了Q_OBJECT关键字,而VS2019在编译时并没有报错,只是在链接时报错;项目是vs的Qt工具创建的,配置应该也没有错。

在stackoverflow上找到一个贴子,具体可以参考附录,给了我一些提示。

解决办法:

把所以有头文件添加到c++项目。

这一点和普通的vs c++项目不一样,vs不对项目外的C++头文件进行编译,只是引用。

附录:

Unresolved symbols QMetaObject when building OpenCV with QT support - Stack Overflow

The Qt MOC (meta-object compiler) is not being run on your Qt class files.

Since you're building from the OpenCV release, I'm assuming that the UI classes already have a Q_OBJECT line within the class declaration.

To generate a .vcproj file that has the necessary build instructions to run MOC, run this command:

qmake -tp vc -r 

If that doesn't work, right-click one of the .h files that contains a Qt class. Under Properties->Custom Build Step->General, you should see something like:

Command Line "$(QTDIR)binmoc.exe" -I".GeneratedFiles." -I"$(QTDIR)include." -I".GeneratedFiles$(ConfigurationName)." -I"$(QTDIR)includeQtCore." -I"$(QTDIR)includeQtGui." .GeneratedFiles$(ConfigurationName)moc_$(InputName).cpp" "-fstdafx.h" "-f[YourQtFile.h]"
Description Moc'ing $(InputFileName)...
Outputs ".GeneratedFiles$(ConfigurationName)moc_$(InputName).cpp"
Additional Dependencies "$(QTDIR)binmoc.exe";$(InputPath)

另一位回答者给出了一些图,所以我截了个滚屏,如下,

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847483.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号