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一节中有介绍

相关推荐
zhooyu3 小时前
C++和OpenGL手搓3D游戏编程(20160207进展和效果)
开发语言·c++·游戏·3d·opengl
HAPPY酷3 小时前
C++ 和 Python 的“容器”对决:从万金油到核武器
开发语言·c++·python
大鹏说大话3 小时前
告别 MSBuild 脚本混乱:用 C# 和 Nuke 构建清晰、可维护的现代化构建系统
开发语言·c#
Mr_sun.3 小时前
Day09——入退管理-入住-2
android·java·开发语言
MAGICIAN...3 小时前
【java-软件设计原则】
java·开发语言
gpfyyds6664 小时前
Python代码练习
开发语言·python
CodeKwang4 小时前
Qt实战:简易Excel表格 | 附完整源码
qt·excel·qtabwidget·qt控件
盐真卿4 小时前
python第八部分:高级特性(二)
java·开发语言
茉莉玫瑰花茶4 小时前
C++ 17 详细特性解析(5)
开发语言·c++·算法