QT 无法解析的外部符号 QMetaObject metaObject

1>TraceTest.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall TraceTest::metaObject(void)const " (?metaObject@TraceTest@@UBEPBUQMetaObject@@XZ)
1>TraceTest.obj : error LNK2001: 无法解析的外部符号 "public: virtual void * __thiscall TraceTest::qt_metacast(char const *)" (?qt_metacast@TraceTest@@UAEPAXPBD@Z)
1>TraceTest.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __thiscall TraceTest::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@TraceTest@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>..\..\env_debug\PST6747AClient.exe : fatal error LNK1120: 3 个无法解析的外部命令

原因:

        1、创建类时没有继承QObject, 编译时没有生成对应的“moc_头文件名"文件

        2、手动添加QObject后编译,不再生成“moc_头文件名"文件

解决办法:

        1、清理项目

        2、执行qmake

        3、重新生成项目

_______________________________________________________________________

VS + Qt开发过程中有时候会新增一个QtClass(带Q_OBJECT定义的类时),发现编译无法通过,可能会出现LNK2001 的错误,这是由于IDE没有自动为新建的类生成 moc_XXXX.cpp 文件导致的。网上很多博客上写使用moc命令来解决,但是这样的话,如果多人开发的话,在你电脑上能变过,moc_XXXX.cpp我们一般都不提交,那么别人有可能也会遇到这种情况。那咱们来找一下造成这种现象的原因吧,这样一次解决就ok了。

        咱们先打开工程对应的xxxx.vcxproj(可以使用notepad++打开修改),对比别的正常的Qt头文件,就会发现,你这个异常的头文件程序把它当成了一个普通的C++class,

   

正常的Qt 类对应的头文件

   
   
   

 
你新建有问题的类的头文件
 

   

看到上面没,你的新建的Qt 类误认为是普通的C++类,所以不会生成对应的moc文件,那咱们改一下就可以了,把当成C++普通类的部分删除,将这个加入到QtMoc中就可以了

修改后的:

   
   
   
   

这还没完,咱们还要修改工程对应的xxxx.filters文件:

格式有一点微小的改变,这里面就不做详细的说明了,照着下面修改下:


   
        Header Files
   

   
        Header Files
   

   
        Header Files
   

   
        Header Files
   


到此,修改完成,重新编译一下就可以了
————————————————
版权声明:本文为CSDN博主「逝水流年丶轻染尘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_18286031/article/details/107985433


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部