Qt-qrc机制简单介绍

我们使用setWindowIcon设置窗口图标的时候,要指明这个图片所在的路径(无论是绝对路径还是相对路径,一般是相对路径,因为用户的路径是不确定的),但是如果将图片保存在某个文件夹中,一旦被误删除,程序就再也无法生成图标了,而qrc机制就是为了解决这个问题。

qrc的解决方法很粗暴:将图片二进制保存在一个数组中,在编译的时候将其编译到可执行文件中去,做到"与目录无关"。使用qrc机制的具体过程如下:

首先创建一个后缀为.qrc的文件 ,qrc 文件是⼀种XML格式的资源配置文件, 它用XML记录硬盘上的图片文件和随意指定的资源名称(虚拟前缀+图片文件名)。应用程序通过资源名称来访问这些资源。

然后进入下面这样的页面

设置虚拟路径前缀

设置图片文件,默认qrc只能添加同级目录或者其子目录下的图片文件

出现下面这样的标识表示设置成功

然后我们编译文件,发现在可执行程序文件的统计目录下多了这样的文件:

打开qrc_my.cpp文件查看其中的内容如下(的确是二进制数组)

我们在程序中访问这个图片如下:

好,接下来我们捋顺一下qrc机制的思路:

  1. 为了触发并支持Qt的qrc机制,我们需要创建一个.qrc文件,然后根据Qtcreactor的引导,创建虚拟路径前缀(其实就相当于虚拟路径)与实际图片之间的"映射"。
  2. 接下来我们在编译GUI程序时,Qt首先检查.qrc文件,读取图片文件,然后将图片二进制存储在.cpp文件中的二进制数组中,并通过某种手段,把虚拟路径与这个数组联系起来(这使得在程序中访问虚拟路径就相当于访问二进制数组,也就相当于访问图片)。
  3. 之后才开始编译程序(图片二进制的.cpp文件也被编译进可执行文件中去了)。至此我们的可执行文件中有了图片。
  4. 在GUI程序执行过程中,一但发现路径是以":"开头,就知道这是使用了qrc机制的虚拟路径,接着读取虚拟路径,通过它找到图片二进制数组,显示图片。

正是因为上面的机制,编程者在编写图片访问路径时,路径必须是":"+"虚拟路径前缀"+"图片文件名"

注:不仅是图片,音频文件等也可以利用qrc机制,包括我们的qss样式表的代码与样式分离也可以利用qss机制,这在Qss一节中有介绍

相关推荐
西门吹-禅16 小时前
java springboot N+1问题
java·开发语言·spring boot
skywalk816316 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
IT笔记18 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode18 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn
逝水无殇18 小时前
C# 运算符重载详解
开发语言·后端·c#
TPBoreas19 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言
敲代码的嘎仔19 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
江华森19 小时前
Python 实现高德地图找房(一):环境搭建与数据爬虫
开发语言·爬虫·python
杜子不疼.19 小时前
【Qt初识】信号槽(三):机制意义、断开连接与 Lambda 表达式
开发语言·数据库·qt
老迟到的茉莉21 小时前
Hermes 是谁?跟 Claude Code 差在哪
开发语言·python