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 类对应的头文件
<ItemGroup>
    <QtMoc Include="xxxx1.h /">
    <QtMoc Include="xxxx2.h /">
    <QtMoc Include="xxxx3.h /">
</ItemGroup>
 
你新建有问题的类的头文件
 
<ItemGroup>
    <ClCompile Include="xxxx4.h /">
</ItemGroup>
看到上面没,你的新建的Qt 类误认为是普通的C++类,所以不会生成对应的moc文件,那咱们改一下就可以了,把当成C++普通类的部分删除,将这个加入到QtMoc中就可以了

修改后的:
<ItemGroup>
    <QtMoc Include="xxxx1.h /">
    <QtMoc Include="xxxx2.h /">
    <QtMoc Include="xxxx3.h /">
    <QtMoc Include="xxxx4.h /">
</ItemGroup>
这还没完,咱们还要修改工程对应的xxxx.filters文件:

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

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

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值