当前位置: 首页 > article >正文

【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文件(文件名不要带中文和特殊符号)

  1. 右键项目,创建一个Qt Resource File文件,文件名随便取
    qwidget_5.gif
  2. 在qrc编辑器,添加前缀
    image.png
    此处我们将前缀设置为/即可
    所谓的前缀,也可以理解成虚拟的目录,这个目录没有在你的电脑上真实存在,是Qt自己抽象出来的,qrc机制的本质就是把图片的二进制数据,转化成C++代码(最终就会在代码中看到很大的char数组,里面就是二进制数据)为了方便Qt代码访问这个图片,Qt就自己抽象出了虚拟的目录~
  3. 在资源编辑器中,点击add files添加资源文件,此处我们需要添加的yui.jpg
    image.png
    这个按钮在创建prefix之前是禁用的,创建好prefix之后就可以使用了,添加的文件就是添加到prefix下面
    注意:导入图片时,需要确保你导入的图片必须在resource.qrc文件的同级目录或者同级目录的子目录里面。
    image.png
    这个效果就说明成功~
    当我们需要在代码中访问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;
}

image.png
编译过后,我们就可以看到qrc中导入的图片资源,被转成了这个qrc_resoutce.cpp这个c++文件。
这个文件存储在那堆临时文件当中,不知道怎么打开的话看这篇文章:【Qt】初始项目代码解释-CSDN博客的目录5

4. 查看临时文件

打开qrc_resoutce.cpp这个文件,你就可以看到一个超级大的char数组,里面存储的就是图片的二进制序列。
当Qt项目进行编译的时候,这个cpp文件就会被一起编译到exe中,当exe程序运行的时候,图片的数据也就被加载到了内存当中~
image.png

5. 总结

qrc机制在Qt编程中是十分常见的,qrc机制可以非常好的解决,绝对路径现对路径路径的问题,确保你的图片所在的路径在目标用户的机器上存在,确保你的图片不会被用户删除~
不过如果你向上传几个GB的视频文件,那么qrc就是无能为力了。
同时我们还要知道,这种资源管理机制并未Qt所独有,很多开发框架都有类似的机制,比如Android的Resources的AssetManager也是类似的效果。


http://www.kler.cn/a/588118.html

相关文章:

  • 记一次小程序爬虫(反编译-自动化字体映射生成)
  • ctf-web: 简单java反序列化示例
  • FakeApp 技术浅析(四):卷积神经网络
  • 线程-进阶
  • C语言之共用体
  • ETL与ELT核心技术解析:如何选择最优数据集成方案
  • 树莓科技(成都)集团:如何铸就第五代产业园标杆
  • BUG日志:Maven项目启动报错(文件名或者文件扩展名过长)
  • 2.2[frontEnd]ESLint
  • android 通过action启动Activity拦截,Activity应用组件添加intent-filter priority(优先级)不生效
  • AF3 make_pseudo_beta函数解读
  • 【菜鸟飞】Conda安装部署与vscode的结合使用
  • 技术解析:基于AI+云计算的智能呼叫中心系统如何重构零售行业服务生态?
  • 数据结构与算法-图论-欧拉路径和欧拉回路(有向图和无向图,骑马修栅栏,单词游戏 play on words)详细代码注解
  • 实践 PyTorch 手写数字识别
  • 查看debian的版本信息
  • Linux系统下如何部署svmspro平台
  • vue3系列:vite+vue3怎么配置通过ip和端口打开浏览器
  • 设计模式,持续更新
  • 数据结构------线性表