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

【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也是类似的效果。

相关文章:

  • Java实现【将Markdown格式文本转换为纯文本】
  • Python跳动的爱心
  • go数据结构笔记
  • Spring(5)——IoC DI
  • DevExpress WinForms 中 SwiftPlot 图表控件的使用指南
  • DeepSeek:技术教育领域的AI变革者——从理论到实践的全面解析
  • 修改 Macbook 终端窗口的显示信息
  • 【算法】用“龟兔赛跑”的思想原地移除元素
  • Go Context包详解与最佳实践
  • Vue学习笔记集--六大指令
  • f-string高级字符串格式化与string Template()
  • NestJS(基于 Express 的现代化框架)
  • coze ai assistant Task 3
  • 主流区块链
  • 人工智能在现代科技中的应用和未来发展趋势。
  • 每日Attention学习27——Patch-based Graph Reasoning
  • 来自腾讯的:《详解DeepSeek:模型训练、优化及数据处理的技术精髓》
  • 3.16学习总结
  • C#开发笔记:INI文件操作
  • 三、重学C++—CPP基础
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会
  • 王受文已任中华全国工商业联合会领导班子成员
  • 网商银行2024年年报发布,客户资产管理规模超过1万亿
  • 马克思主义理论研究教学名师系列访谈|杜玉华:马克思主义是“认识世界”和“改变世界”的思维工具
  • 民生访谈|支持外贸企业拓内销,上海正抓紧制定便利措施
  • 民生银行一季度净利127.42亿降逾5%,营收增7.41%