VS + QT 出现 LNK2001 无法解析的外部符号 QMetaObject 的问题

        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>

到此,修改完成,重新编译一下就可以了

猜你喜欢

转载自blog.csdn.net/qq_18286031/article/details/107985433