【小沐学QT】QT学习之资源文件qrc的使用

文章目录

1、简介

Qt 资源系统(Qt Resource System)是一种将图片、数据存储在二进制文件中的一套系统。

Qt 资源系统是独立于平台的,因为无论是图片还是翻译文件等,都会被打包成二进制数据。你可以将这些二进制数据保存到可执行文件中,即"静态加载资源";你也可以将这些二进制数据单独保存在一个文件中,即"动态加载资源"。

qrc 文件是基于 XML 格式的资源系统配置文件,该文件中指定了各种资源的信息。完整的将资源文件打包成二进制数据的流程是:写 qrc 文件 -> 用 rcc 编译 -> 二进制数据。

2、qrc添加

2.1 向导方式添加

新建项目之后:

在指定项目节点上鼠标右键,选择菜单"Add New..."

在弹出的窗口里,依次选择"Qt","Qt Resource File",最后点击最下面的按钮"Choose..."

在弹出的窗口中,填写一个自定义的资源名称:resource

添加前缀,给资源定义一个路径。

在上面定义的前缀路径里,添加所需的图片等资源。

在指定资源上鼠标右键菜单,选择"复制资源路径到剪切板"

后面有新的图片要添加,可以右键qrc文件,然后Open With -》资源编辑器,就可以重新到添加文件的界面。

之后项目打包发布的时候就不需要resource文件夹了,所有的图片信息都以二进制形式存在xxx.qrc文件里了。

2.2 代码方式添加

  • (1)pro文件添加代码
bash 复制代码
RESOURCES += \
    resource.qrc
  • (2)编辑.qrc文件

2.3 动态方式添加

动态方式不需要写 pro 文件,需要手动用 rcc 工具编译 qrc 文件,然后用 QResource 类加载。

(1)手动用 rcc 工具编译 qrc 文件。

bash 复制代码
rcc -binary resource.qrc -o resource.rcc 

(2)在程序中使用 QResource 类加载。

bash 复制代码
QResource::registerResource("/path/resource.rcc");

备注:rcc 工具的使用请参考官方文档"Resource Compiler (rcc)"。

3、qrc使用

  • 两种资源路径
    假设已经加载好资源,访问这些资源的两种方式是:
bash 复制代码
文件路径「:/images/about.png」
URL「qrc:///images/about.png」

以QLabel和QPushButton为例添加图片,代码如下:

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QWebEngineView>
#include <QLabel>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    
    //标签加载图片
    QLabel *imgLabel = new QLabel(this);
    imgLabel->resize(64,64);
    imgLabel->move(0,0);
    imgLabel->setPixmap(QPixmap(":/image/button/res/test2.jpg").scaled(64,64));

    //按钮加载图片
    QPushButton *imgBtn = new QPushButton(this);
    imgBtn->resize(460,460);
    imgBtn->move(100,100);
    imgBtn->setStyleSheet("QPushButton {background-image: url(:/image/button/res/test6.png)}");
}

MainWindow::~MainWindow()
{
    delete ui;
}

运行程序如下:

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

相关推荐
靡不有初1117 分钟前
CCF-CSP第18次认证第一题——报数【两个与string相关的函数的使用】
c++·学习·ccfcsp
enyp801 小时前
Qt QStackedWidget 总结
开发语言·qt
luoyayun3611 小时前
Trae+Qt+MSVC环境配置
vscode·qt·环境配置·trae qt
cookies_s_s2 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
不想编程小谭2 小时前
力扣LeetCode: 2506 统计相似字符串对的数目
c++·算法·leetcode
曼巴UE53 小时前
UE5.3 C++ TArray系列(一)
开发语言·c++·ue5
阿巴~阿巴~4 小时前
多源 BFS 算法详解:从原理到实现,高效解决多源最短路问题
开发语言·数据结构·c++·算法·宽度优先
CoderCodingNo5 小时前
【GESP】C++二级真题 luogu-b3924, [GESP202312 二级] 小杨的H字矩阵
java·c++·矩阵
刃神太酷啦5 小时前
堆和priority_queue
数据结构·c++·蓝桥杯c++组
Heris995 小时前
2.22 c++练习【operator运算符重载、封装消息队列、封装信号灯集】
开发语言·c++