在一个QT项目中新建一个带QObject定义的类后 (不是继承),可能会出现LNK2001 的错误,这是由于IDE没有自动为新建的类生成 moc_XXXX.cpp 文件导致的。

一种做法是手动生成moc_XXXX.cpp文件,然后复制到指定位置,如https://www.cnblogs.com/lovebay/p/9337528.html,但一旦文件有改动,就需要重新手动操作一遍。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

另一种做法是通过配置,自动生成moc_XXXX.cpp文件,可参考https://jingyan.baidu.com/article/3065b3b68518adbecef8a477.html。步骤是

  1. 修改类的.h文件的配置属性,在“项类型”或“ItemType”中选择“自定义生成工具”或“Custom Build Tool”,点击应用,左边的属性里会出现一个新的选项,如图所示:
     VS + QT 出现 LNK2001 无法解析的外部符号 QMetaObject 的问题 随笔
  2. 参考其它正确的.h文件配置该项即可

 若这一过程完全配置正确,编译链接还是有问题的话,再参考https://blog.csdn.net/humanking7/article/details/80871729,因为刚才只是配置了.h文件,而项目还没有正确编译对应的cpp文件。步骤:

  1. 编辑项目的.vcxproj文件,参考其它的QT文件,我碰到的是缺少下面这个XML片段

    <ClCompile Include="GeneratedFiles\Debug\moc_XXXXX.cpp">
      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
    </ClCompile>

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄