【Qt】qrc机制介绍
🏠个人主页:Yui_
🍑操作环境:Qt Creator
🚀所属专栏:Qt
文章目录
- 1. qrc机制介绍
- 2. 创建qrc文件
- 3. 代码演示
- 4. 查看临时文件
- 5. 总结
Qt中使用qrc机制帮我们自动完成一些任务,如上篇文章中的图标问题,可以更方便的来管理项目依赖的静态资源。
1. qrc机制介绍
qrc文件是一种XML格式的资源配置的文件,它用XML记录硬盘上的文件和对应指定的资源名称,应用程序通过资源名来访问这些资源。
在Qt开发过程中,可以通过将资源文件添加到项目中来方便访问和管理这些资源,这些资源文件可以位于qrc文件所在目录的同级或者其子目录下。
在构建程序的过程中,Qt会把资源文件的二进制数据转成cpp代码,编译到exe中,从而使得依赖资源变成“路径无关”。
2. 创建qrc文件
在项目中创建一个qrc文件(文件名不要带中文和特殊符号)
- 右键项目,创建一个Qt Resource File文件,文件名随便取
- 在qrc编辑器,添加前缀
此处我们将前缀设置为/
即可
所谓的前缀,也可以理解成虚拟的目录,这个目录没有在你的电脑上真实存在,是Qt自己抽象出来的,qrc机制的本质就是把图片的二进制数据,转化成C++代码(最终就会在代码中看到很大的char数组,里面就是二进制数据)为了方便Qt代码访问这个图片,Qt就自己抽象出了虚拟的目录~ - 在资源编辑器中,点击
add files
添加资源文件,此处我们需要添加的yui.jpg
这个按钮在创建prefix之前是禁用的,创建好prefix之后就可以使用了,添加的文件就是添加到prefix下面
注意:导入图片时,需要确保你导入的图片必须在resource.qrc
文件的同级目录或者同级目录的子目录里面。
这个效果就说明成功~
当我们需要在代码中访问qrc中管理的文件时,就需要在路径上带有:前缀
下面看演示:
3. 代码演示
#include "widget.h"
#include "ui_widget.h"
#include <QIcon>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QIcon icon(":/yui.jpg");//格式要求
this->setWindowIcon(icon);
}
Widget::~Widget()
{
delete ui;
}
编译过后,我们就可以看到qrc中导入的图片资源,被转成了这个qrc_resoutce.cpp
这个c++文件。
这个文件存储在那堆临时文件当中,不知道怎么打开的话看这篇文章:【Qt】初始项目代码解释-CSDN博客的目录5
4. 查看临时文件
打开qrc_resoutce.cpp
这个文件,你就可以看到一个超级大的char数组,里面存储的就是图片的二进制序列。
当Qt项目进行编译的时候,这个cpp文件就会被一起编译到exe中,当exe程序运行的时候,图片的数据也就被加载到了内存当中~
5. 总结
qrc机制在Qt编程中是十分常见的,qrc机制可以非常好的解决,绝对路径现对路径路径的问题,确保你的图片所在的路径在目标用户的机器上存在,确保你的图片不会被用户删除~
不过如果你向上传几个GB的视频文件,那么qrc就是无能为力了。
同时我们还要知道,这种资源管理机制并未Qt所独有,很多开发框架都有类似的机制,比如Android的Resources的AssetManager也是类似的效果。