我们使用setWindowIcon设置窗口图标的时候要指明这个图片所在的路径无论是绝对路径还是相对路径一般是相对路径因为用户的路径是不确定的但是如果将图片保存在某个文件夹中一旦被误删除程序就再也无法生成图标了而qrc机制就是为了解决这个问题。qrc的解决方法很粗暴将图片二进制保存在一个数组中在编译的时候将其编译到可执行文件中去做到“与目录无关”。使用qrc机制的具体过程如下首先创建一个后缀为.qrc的文件qrc 文件是⼀种XML格式的资源配置文件, 它用XML记录硬盘上的图片文件和随意指定的资源名称虚拟前缀图片文件名。应用程序通过资源名称来访问这些资源。然后进入下面这样的页面设置虚拟路径前缀设置图片文件默认qrc只能添加同级目录或者其子目录下的图片文件出现下面这样的标识表示设置成功然后我们编译文件发现在可执行程序文件的统计目录下多了这样的文件打开qrc_my.cpp文件查看其中的内容如下的确是二进制数组我们在程序中访问这个图片如下好接下来我们捋顺一下qrc机制的思路为了触发并支持Qt的qrc机制我们需要创建一个.qrc文件然后根据Qtcreactor的引导创建虚拟路径前缀其实就相当于虚拟路径与实际图片之间的“映射”。接下来我们在编译GUI程序时Qt首先检查.qrc文件读取图片文件然后将图片二进制存储在.cpp文件中的二进制数组中并通过某种手段把虚拟路径与这个数组联系起来这使得在程序中访问虚拟路径就相当于访问二进制数组也就相当于访问图片。之后才开始编译程序图片二进制的.cpp文件也被编译进可执行文件中去了。至此我们的可执行文件中有了图片。在GUI程序执行过程中一但发现路径是以“”开头就知道这是使用了qrc机制的虚拟路径接着读取虚拟路径通过它找到图片二进制数组显示图片。正是因为上面的机制编程者在编写图片访问路径时路径必须是“”“虚拟路径前缀”“图片文件名”。注不仅是图片音频文件等也可以利用qrc机制包括我们的qss样式表的代码与样式分离也可以利用qss机制这在Qss一节中有介绍