文章目录
- 0. 前言
- 1. qrc机制
- 2. qrc使用
0. 前言
要设置窗口图标,就需要有图片及其图片所在路径,在本机上可能没什么问题,但是换了一个机器,路径可能不一致或者图片丢失,这就导致图片显示不出来。
Qt引入qrc机制,可以解决上述问题:
- 确保图片所在路径在目标用户机器上存在
- 确保图片不会丢失
1. qrc机制
给Qt项目引入一个额外的xml
文件(后缀名使用.qrc
),这个xml
中把要使用的图片资源导进来,并在xml
当中记录
后续在Qt编译项目的时候,就会根据qrc
中描述的信息,找到图片内容,并且提取图片的二进制数据,把这些二进制数据转成C++代码,最终编译到exe
里面,这样,图片就变成了exe
的一部分。
当然,这个图片资源较小,是很方便的,但如果弄很大的资源文件(几个GB),那
qrc
就无能为力了。这样会导致编译特别慢,生成的exe文件,会特别大。
2. qrc使用
首先在项目当中创建一个qrc
文件
文件名不要带中文名和特殊字符
然后将图片导入qrc
文件
-
创建一个前缀
Prefix
这个所谓的前缀,可以理解为虚拟目录,这个目录在我们电脑上不是真是存在的,是Qt自己抽象出来的。因为qrc机制本质就是把图片的二进制数据转成C++代码,为了方便Qt代码中访问到这个图片,Qt自己就抽象一个虚拟目录。
-
将图片导入到资源文件当中
此时得到的目录就是当前代码所在的目录
导入图片的时候,必须确保导入的图片在
resource.qrc
文件的同级目录或者同级子目录里面。所以想要把图片拷贝到当前项目目录即可
看到这个效果,就说明导入成功
#include "widget.h"
#include "ui_widget.h"
#include<QIcon>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//QIcon icon("./logo.jpg");
QIcon icon(":/logo.jpg");
this->setWindowIcon(icon);
}
Widget::~Widget()
{
delete ui;
}
当代码中需要访问
qrc
中管理的文件的时候,就需要在路径上带有:
前缀
qrc中导入的图片资源,就会被转成qrc_resource.cpp
这个C++代码,Qt编译的时候,这个cpp
文件就一起被编译到了exe当中。
当exe程序运行的时候,图片的数据也会被加载到内存当中了。