Qt5.10:如何在宏中引用.qrc资源文件内的图形资源?
如何用宏引用Qt资源文件中的图形资源
当然可以通过宏来引用.qrc资源文件里的图形元素!你遇到的问题本质是没有使用Qt资源系统的标准路径格式,再加上影子构建的特性,导致原来的本地相对路径失效了。下面给你一步步讲清楚怎么解决:
核心要点:Qt资源文件的正确引用路径
Qt的资源系统会把.qrc里的文件编译进程序二进制包,引用这些资源时必须使用**:/前缀**的路径,而不是本地文件系统的相对路径。比如你在.qrc里添加了graphics/icon1.png,对应的资源路径就是":/graphics/icon1.png"。
正确的宏写法
把你的宏改成用资源路径的形式就可以了,这里推荐用QStringLiteral代替QString::fromUtf8——它是Qt5引入的编译期字符串优化,性能更好,也更适合在宏里使用:
#define MY_ICON QPixmap(QStringLiteral(":/graphics/icon1.png"))
如果你的Qt5.10版本对QStringLiteral支持没问题,直接用这个就行;要是你习惯用fromUtf8,也可以写成:
#define MY_ICON QPixmap(QString::fromUtf8(":/graphics/icon1.png"))
额外注意事项
- 确保你的.qrc文件已经正确添加到
.pro项目文件中,比如RESOURCES += your_resource_file.qrc(从你说的QtCreator里能正常选资源来看,这一步应该已经做好了)。 - 如果后续修改了.qrc里的文件结构(比如重命名文件夹/文件),要同步更新宏里的资源路径,不然会出现找不到资源的情况。
- 影子构建模式下,源码目录里的本地文件夹不会自动复制到构建目录,所以原来的相对路径
"graphics/icon1.png"肯定找不到文件,但用:/开头的资源路径就完全不受构建目录的影响——因为资源已经打包进程序里了。
内容的提问来源于stack exchange,提问作者LittleSaints




