Qt资源文件qrc怎么添加,还有Qt资源文件qrc打包以后图片不显示该怎么办,这两个问题是做Qt界面开发和发布程序的时候经常遇到的。qrc文件能够把图片、图标、QML文件和翻译文件这些资源,都编译到程序里面去,避免发布的时候落下素材。但是,把资源放进了项目目录,并不等于它就已经写进了程序里面,qrc有没有参与构建、访问路径是不是对的、文件名的大小写是不是一致的,这些都会影响到最后的显示结果。
一、Qt资源文件qrc怎么添加
Qt资源文件的作用,是给项目里的静态素材建一个统一的索引。在添加以前,可以先整理一下资源目录,把图标、背景图和QML素材分开存放,不要直接去引用桌面或者下载目录里面的文件。
1、创建qrc资源文件
在Qt Creator里面,选择【项目右键】→【Add New】→【Qt】→【Qt Resource File】,填好资源文件的名字,把它保存到当前工程目录下面。
资源文件可以起名叫resources.qrc,或者images.qrc,或者icons.qrc。小型项目用一个qrc通常就够用了,图片比较多的时候,可以按照界面图片、工具栏图标和QML资源分开管理,后面查找和修改起来会方便一点。
2、添加资源前缀和图片
打开qrc文件以后,先创建一个资源前缀,再通过【Add Files】把需要用的图片加到资源列表里面。
资源前缀可以设置成/images,或者/icons,或者/qml。假设前缀是/images,文件名字是logo.png,那么程序里面完整的资源路径通常就是:/images/logo.png。这里的冒号表示从Qt资源系统里面读取,而不是从电脑的硬盘目录读取。
3、确认qrc参与项目构建
使用qmake工程的时候,需要在pro文件里面确认有没有RESOURCES+=resources.qrc这一行。使用CMake工程的时候,则需要把qrc文件加到对应的可执行目标里面,或者打开AUTORCC自动处理功能。修改工程配置以后,应该重新运行一次qmake或者重新配置CMake,再执行一次完整构建,不然新加入的资源有可能没有进入当前程序。
二、Qt资源文件qrc打包后图片不显示怎么办
在开发环境里面图片显示正常,打包以后却不显示了,这种情况往往说明程序原来读取的是本地的相对路径,而不是qrc资源。项目目录结构一旦发生变化,原来图片的位置就找不到了。
1、检查资源访问路径
在代码、样式表或者QML里面,检查图片路径,看看是不是用了:/images/logo.png这种资源路径,而不是images/logo.png、../images/logo.png或者磁盘上的绝对路径。普通的相对路径要依赖程序当前的工作目录,在本机调试的时候可能刚好有效,复制到其他电脑上就容易失效。
2、检查前缀和文件名称
资源路径里面的前缀、文件名、扩展名和大小写,都必须跟qrc里面记录的内容完全一致。Windows环境对大小写不太敏感,换到Linux或者嵌入式系统以后,Logo.png和logo.png会被当成两个不同的文件。如果qrc里面给资源设置了Alias,程序里面也要用Alias以后的名字,不能再继续引用原来的文件名。
3、确认图片已经编译进当前程序
可以在程序里面用【QFile::exists】检查一下对应的资源路径是不是存在。
如果QFile::exists(":/images/logo.png")返回false,那问题通常是出在qrc的内容或者构建配置上面;如果返回true但是界面上还是没有图片,就要继续检查图片的格式、控件的尺寸、透明度、有没有被样式表覆盖,还有缩放的方式。项目里面如果包含了多个可执行目标,还需要确认qrc加进去的是当前打包的目标,而不是另外一个测试程序。
三、Qt资源文件怎么管理更稳定
qrc可以减少发布时遗漏资源的问题,但是资源数量变多以后,如果目录和命名没有统一起来,路径错误还是会频繁出现。提前定好一些简单的规则,比每次碰到空白图片再去一项一项排查要省事。
1、固定资源目录结构
可以在项目里面统一建立resources、images、icons和qml这些目录,把对应的文件放到固定的位置。不要把用途相同的图片分散到好几个源代码目录里面,也不要在移动文件以后只改了磁盘位置,却忘了更新qrc里面的记录。
2、规范文件和前缀命名
文件名尽量使用英文、数字和下划线,避免空格、中文符号以及只靠大小写区分的同名文件。资源前缀也应该保持稳定,比如按钮图标统一放在/icons下面,界面背景统一放在/images下面。命名规则统一以后,代码和样式表里面的路径会更容易检查。
3、修改资源后清理构建缓存
新增加了图片、修改了Alias、调整了Prefix或者移动了qrc文件以后,旧的构建缓存里面可能还保留着原来的资源。这时候可以清理一下项目,有必要的话把构建目录也删掉,然后重新配置再完整编译一次。不要只是反复运行程序,因为资源编译的步骤如果没有重新执行,界面上可能还在使用旧的版本。
总结
Qt资源文件qrc怎么添加,以及Qt资源文件qrc打包后图片不显示怎么办,关键是把资源真正加进qrc,并且让qrc参与到当前程序的构建当中。程序读取图片的时候要使用以:开头的资源路径,同时检查前缀、文件名、大小写和Alias是不是一致。打包后发现图片缺失,可以先用QFile确认资源是否存在,然后再排查控件显示和样式的问题。资源目录、命名方式还有构建流程都统一以后,换电脑或者换发布目录的时候,就不太容易再次出现图片丢失的情况。