VS2012中QT资源文件qrc加载失败(Q_INIT_RESOURCE报错)

本文介绍了在VS2012中使用QT时遇到的qrc资源文件加载失败的问题,详细分析了Q_INIT_RESOURCE报错的原因,并提供了误删qrc_*.cpp文件后的解决步骤,包括对比正常项目配置、重新生成qrc_*.cpp文件,以及正确引用qrc资源的路径格式。
摘要由CSDN通过智能技术生成

在QT中如果需要使用资源时,会用到一个qrc文件.qrc文件本质上是一个XML文件,里面描述了相应资源的位置。一般将需要引用的资源放到与main.cpp同级的目录。我用VS2012开发QT,如果按正常的情况来建立QT,会带有一个qrc文件和对就的qrc*.cpp的文件,如下图(qrcexample.qrc和qrc_qrcexample.cpp)。


其中qrc_qrcexample.cpp是自动生成的,是在qrc名字的前面加了一个qrc_的前缀。如果这样正常添加资源文件是没有问题的,但是我却误删了qrc_qrcexample.cpp文件。等到想用qrc来加载图片时,按着正常的操作,在qrcexample.qrc中加了相应的图片,可是编译之后,怎么引用路径都无法得到图片。这到底是怎么了?找了很多资料,说是可以用Q_INT_RESOURCE在main函数中强制加载qrc文件,可是却报错了。(附:Q_INT_RESOURCE的调用方式是,Q_INT_RESOURCE(qrc文件名),注意一定要是qrc文件名。)


一般来说,无法解析外部符号,是因为函数有定义却没有去实现。那这里的qInitResources_qrcexample(void)根本就没有定义过,又怎么可能去实现呢?那只有一种解释,该函数是由系统自动生成并实现了。现在系统生成了该函数的定义,却没有相应的实现。那怎么办?

于是网上查找资料,后面找到了一篇文章,说是系统会生成一个与qrc资源文件相对应的CPP(也就是前面误删的qrc_qrcexample.cpp)。既然误删了,那是不是可以再建一个相同的?结果证明,这种想法太天真了。因为只是建一个这样的文件,里面什么内容都没有,那不是形同虚设吗?

想着,这个文件既然是系统生成的,那必然会在系统中有所配置,可是在找遍了配置项后,都没有找到一个对应的。后面就想着,VS的工程文件中有对引用和编译信息的配置,会不是存在那里呢?如果存在了那里,那我又要如何才能分辨出哪个是呢?最后的办法就是找一个正常的来对比。立即新建一个项目test,自动生成了test.qrc和qrc_test.cpp,用UE打开test.vcxproj,是一个XML格式的文件,搜索qrc_test.cpp,果然有相应的配置信息。

 <ClCompile Include="GeneratedFiles\qrc_test.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
      </PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
      </PrecompiledHeader>
    </ClCompile>
依样画葫芦,用UE打开QrcExample.vcxproj,然后找到相应的位置,添加上相应的节点内容,下图的红框部分就是添加的。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值