2.3QT资源文件

32 篇文章 0 订阅
订阅专栏
16 篇文章 2 订阅
订阅专栏
11 篇文章 0 订阅
订阅专栏

2.3QT资源文件

文章目录

  • 2.3QT资源文件
  • 概述
  • 2.3.1建立一个资源文件
  • 2.3.2qrc文件格式
  • 2.3.3设置按钮图标
  • 2.3.4Qt中引用外部资源
  • 总结


概述

在实际的QT的应用程序开发,会大量运用图片,图标或者其他类型的文件。Qt也专门定义了一套资源系统,资源文件的格式为*.qrc*.qrc文件通过rcc资源编译器生成一个名称格式为qrc_*.cpp的标准C++文件,可以通过任意C++文件进行编译,与其他的源文件一块链接到目标程序中使用。qrc 文件在编译后会将资源编译链接进程序内部,在发布应用程序的时候就不需要带上一堆文件夹,省去了一切麻烦。如果资源文件太大,超过了 4以上的文件就不建议放在资源文件中,编译会出现错误。这些大的文件可以使用系统路径访问或者外挂资源方式访问

​ Qt 系统资源系统基于 qmake、rcc 和 QFile 三方面紧密合作,让资源文件的使用与普通操作系统里的文件使用方式很相似,Qt 应用程序内部的资源文件有一套自己的虚拟文件系统,文件路径形式":/save.png" ,冒号开头的就是代表访问内嵌的资源文件。所有内嵌的资源文件都是只读的,在程序运行时不能修改资源里的文件,只能读取使用


2.3.1建立一个资源文件

1)打开 Qt应用程序,新建一个Qt Widgets Application的项目,这里我们把项目的名称命名为ResourceFile
2)鼠标选中工程左边的项目视图文件夹,单击鼠标右键添加新的文件。

注意
只要是该项目的文件夹,任意点击任何一个都是可以的。

在这里插入图片描述
3)选择QT资源文件
在这里插入图片描述

4)设置资源文件的名称和存放路径
在这里插入图片描述
5) 将资源文件添加到当前的项目中
添加成功后,项目中会自动生成一个Resources的文件
在这里插入图片描述
在这里插入图片描述

  1. 向资源文件中添加需要内嵌到程序的文件

在这里插入图片描述
如图所示:
在这里插入图片描述
7)资源文件管理器
鼠标选中 qrc 资源文件,右键->open with–>选择打开资源文件的方式。资源管理器可以修改资源文件的访问路径和别名(程序内部使用的名称)。

在这里插入图片描述

之前我们的文件路径是/,现在我们改成w,点击保存

在这里插入图片描述

更改后如图所示:
在这里插入图片描述
我们也可以给资源文件取别名:

之前的文件名称是2.png。现在我们改成two.png

在这里插入图片描述

  1. 查看资源文件在程序中的访问路径。
    选中一个资源文件,鼠标单击右键可以看到两种访问的方法。鼠标左键单击即可复制到裁剪板。

在这里插入图片描述

2.3.2qrc文件格式

qrc文件的格式与ui文件一样都是XML格式。

右键单击image.qrc选择open with中的普通文本编辑,点击查看。

例如:

<RCC>
    <qresource prefix="/w">
        <file alias="two">2.png</file>
    </qresource>
</RCC>

<qresource prefix="/w">:表示了资源文件的前缀

<file alias="two">2.png</file>:表示资源文件访问的路径。

可以手动修改资源文件内容进行添加新文件。

image.qrc通过rcc工具编译后会生成一个qrc_image.cpp文件

2.3.3设置按钮图标

设置按钮的图标有两种方式,一是通过UI界面进行设置,而是通过setIcon函数进行设置。

1)通过UI界面设置图标
方式一:
右键按钮控件单击转到改变样式表,选择添加资源即可。
注意:下拉按钮选择background-image,然后再选择要添加的背景图片
在这里插入图片描述

在这里插入图片描述
方式二:
点击按钮控件找到右下角的属性中的icon
在这里插入图片描述
2)通过代码方式设置按钮图标

 ui->pushButton->setIcon(QIcon(":/image/open-source-line.png"));
    ui->pushButton_2->setIcon(QIcon(":/image/plane-fill.png"));

效果图:
(按钮上的文字可以在ui界面上删除)
在这里插入图片描述

2.3.4Qt中引用外部资源

为什么需要引用外部资源

​ 前面写到可以使用qrc资源文件,也就是在QT工程中添加资源文件,这种方式对于资源比较少的情况是可以使用,添加的资源的文件qrc.cpp会直接存放到静态数组中,从而一直占用内存,使内存的利用率不高,如果添加的资源文件过多,甚至会导致编译无法通过,造成out of memory的错误

​ 通过从外部引用资源文件二进制文件,(一般是rcc文件)在程序中进行调用资源文件。

针对于Windows下的QT平台

rcc文件

rcc工具在QT的安装目录下,找到自己的QT的安装目录D:\MyTool\QT\Tools\mingw730_64\bin。rcc需要在命令行中使用,还需要将rcc工具的路径添加到电脑系统的PATH环境变量中。

注意:添加好环境变量需要重启电脑,否则不生效

在控制面板–>系统和安全—>系统—>高级系统设置–环境变量—>系统变量—>点击path---->点击编辑

在这里插入图片描述

在这里插入图片描述

1.在项目中新建一个qrc格式的文本文件,名称为ex_resources.qrc。文件内容如下:

<RCC>
 <qresource prefix="/">
 <file>image/open-source-line.png</file>
 <file>image/plane-fill.png</file>
 <file>video/bs.mp4</file>
 </qresource>
</RCC>

在这里插入图片描述

2.编译资源文件

在该项目路径下,输入cmd打开命名行窗口

输入以下命令:

rcc -binary ex_resources.qrc -o ex_resources.rcc

编译成功后,rcc会把ex_resources.qrc里面描述的所有图片,视频等文件进行打包压缩生成一个二进制的ex_resources.rcc文件,这个二进制文件中就包含了所有的资源。

在这里插入图片描述
在这里插入图片描述

3.引用资源文件的函数

引用外部资源需要在main函数里进行注册。

相关静态函数如下:

static bool registerResource(const QString &rccFilename, const QString &resourceRoot=QString());
static bool unregisterResource(const QString &rccFilename, const QString &resourceRoot=QString());
static bool registerResource(const uchar *rccData, const QString &resourceRoot=QString());
static bool unregisterResource(const uchar *rccData, const QString &resourceRoot=QString());

registerResource 是一个重载函数,可以填资源文件的路径也可以填二进制数据指针。资源文件加载成功返回true,失败返回 false。

unregisterResource 与 registerResource 功能相反,用来注销不使用的资源。

1)注册资源文件格式示例:

QResource::registerResource("ex_resources.rcc");

注意:ex_resources.rcc资源文件的路径根据实际情况填写

完整代码

  • pro文件
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

  • .h文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

  • main.cpp
#include "widget.h"

#include <QApplication>
#include<QDebug>
#include<QResource>
int main(int argc, char *argv[])
{
    QResource::registerResource("C:\\Users\\72916\\Desktop\\MyQt\\2_3_4\\ResourcesFile\\ex_resources.rcc");
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

  • widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->pushButton->setIcon(QIcon(":/image/open-source-line.png"));
    ui->pushButton_2->setIcon(QIcon(":/image/plane-fill.png"));
}

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


  • ui文件
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Widget</class>
 <widget class="QWidget" name="Widget">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Widget</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>50</x>
     <y>70</y>
     <width>121</width>
     <height>101</height>
    </rect>
   </property>
   <property name="text">
    <string/>
   </property>
  </widget>
  <widget class="QPushButton" name="pushButton_2">
   <property name="geometry">
    <rect>
     <x>270</x>
     <y>70</y>
     <width>80</width>
     <height>111</height>
    </rect>
   </property>
   <property name="text">
    <string/>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

运行结果:
在这里插入图片描述

总结

对文件的引有两种方式,一是使用qrc文件,对于资源文件较小可以方便使用,二是如果资源文件过大,可以采用rcc外部应用文件进行访问。

注意:rcc资源文件路径格式的问题

打开rcc文件路径时,出现了错误提示incomplete universal character name…(通用字符的不完整)

查了资料,在写文件路径的时候,一般是单独“/”或者是“\”,计算机无法完整的理解。

解决如下
在该路径下的单斜杠转换成双斜杠(“//”或者“\”)都是可以的。

Qt使用资源文件QtResource
一起coding,一起嗨。
06-19 1374
勾选Generate form使用ui。
跨平台开发Qt及其他c++项目,源码文件采用utf-8编码格式到底带不带bom?
咸鱼爱幻想的博客
03-14 1018
BOM 是 byte-order mark 的缩写,是 “字节序标记” 的意思, 它常被用来当做标识文件是以 UTF-8、UTF-16 或 UTF-32 编码的标记。在 Unicode 编码中有一个叫做 “零宽度非换行空格” 的字符 ( ZERO WIDTH NO-BREAK SPACE ), 用字符 FEFF 来表示。对于 UTF-16 ,如果接收到以 FEFF 开头的字节流, 就表明是大端字节序,如果接收到 FFFE, 就表明字节流 是小端字节序。
【小沐学QTQT学习之资源文件qrc的使用
爱看书的小沐
02-25 2989
Qt 资源系统(Qt Resource System)是一种将图片、数据存储在二进制文件中的一套系统。Qt 资源系统是独立于平台的,因为无论是图片还是翻译文件等,都会被打包成二进制数据。你可以将这些二进制数据保存到可执行文件中,即“静态加载资源”;你也可以将这些二进制数据单独保存在一个文件中,即“动态加载资源”。qrc 文件是基于 XML 格式的资源系统配置文件,该文件中指定了各种资源的信息。完整的将资源文件打包成二进制数据的流程是:写 qrc 文件 -> 用 rcc 编译 -> 二进制数据。
Qt开发之资源文件(Resource File)的使用
qingxin_的博客
02-01 923
Qt项目中添加的资源文件
Qt资源系统
weixin_34033624的博客
07-22 252
简述 Qt资源系统用于存储应用程序的可执行二进制文件,它采用平台无关的机制。当你的程序总需要这样的一系列文件(图标、翻译文件等)并且不想冒丢失某些文件的风险时,这就显得十分有用。 资源系统基于 qmake、rcc(Qt 资源编译器) 和 QFile 之间的紧密合作。 简述 资源集合文件qrc 外部二进制资源 内编译资源...
Qt资源文件使用
Poseidon's Maserati
06-28 2824
使用用自己的图片资源: 将图片文件拷贝到项目位置下。 邮件项目->添加新文件->Qt->Qt resource file->给资源文件起名res res会自动生成res.qrc open in editor编辑资源 添加前缀 添加文件 使用资源 ": + 前缀名 + 文件名" ui->actionNew->setIcon(QIcon(":/...
qt必备学习手册初级
06-22
4.4 资源文件 26 4.5 对话框QDialog 29 4.5.1 基本概念 29 4.5.2 标准对话框 30 4.5.3 自定义消息框 31 4.5.4 消息对话框 33 4.5.5 标准文件对话框 36 4.6 常用控件 39 4.6.1 QLabel控件使用 39 4.6.2 QLineEdit 41 ...
黑马程序员Qt全解教程.zip
07-03
黑马程序员Qt入门教程的相关文档。...4.4 资源文件 26 4.5 对话框QDialog 29 4.5.1 基本概念 29 4.5.2 标准对话框 30 4.5.3 自定义消息框 31 4.5.4 消息对话框 33 4.5.5 标准文件对话框 36 4.6 常用控件 39
Qt4编程.pdf
11-26
8.6.3资源文件的使用方法 8.6.4资源浏览器的使用 8.7锚接窗口 8.7.1创建锚接窗口的方法和流程 8.7.2设置锚接窗体状态的方法 8.8多文档 8.9问题与解答 8.10总结与提高 第9章Qt样式表与应用程序外观 9.1应用程序的...
文件数据MySQL Sidu 2.3 多国语言-sidu23.rar
04-08
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...
打开文件 qt代码
11-18
qt Windows 主窗口图形界面 notepad 实现实例,附带注释!
[文件数据]MySQL Sidu 2.3 多国语言_sidu23.rar
最新发布
04-21
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...
精通qt4编程(源代码)
03-17
\4.3.1 创建资源文件 98 \4.3.2 定义主窗口类 98 \4.4 锚接部件 102 \4.5 状态栏 105 \4.6 实现文本编辑器功能 107 \4.7 多文档 118 \4.8 打印文档 119 \4.9 小结 120 \第5章 布局管理 121 \5.1 Qt布局管理器——...
精通Qt4编程 pdf 中文版 part2
04-15
本书分为三部分。 目录回到顶部↑前言 初级篇 第1章 Qt初步实践 1.1 第一个Qt程序 1.2 使用Qt布局管理器 1.3 关联操作 1.4 小结 第2章 对话框——QDialog 2.1 自定义对话框 ...2.3 Qt内建(built-in)对话框 ...附录E Qt资源
精通Qt4编程 pdf 中文版 part1
04-15
本书分为三部分。 目录回到顶部↑前言 初级篇 第1章 Qt初步实践 1.1 第一个Qt程序 1.2 使用Qt布局管理器 1.3 关联操作 1.4 小结 第2章 对话框——QDialog 2.1 自定义对话框 ...2.3 Qt内建(built-in)对话框 ...附录E Qt资源
Qt 6之二:项目的结构、资源文件的使用(修改)
cnds123的专栏
05-23 1828
Qt 6之二:本文介绍Qt 6的项目的结构、资源文件的使用。
Qt基础-项目添加资源文件
qq_30725967的博客
01-05 892
Qt项目添加资源文件和使用资源文件
QT学习 09 资源文件
Bai__niao的博客
10-22 93
Qt中的资源文件(Resource Files)是一种用于将应用程序资源(如图像、声音文件、样式表等)打包和嵌入到可执行文件中的机制。这些资源文件通常使用拓展名为 .qrc(Qt Resource Collection)来命名。
Qt资源文件
weixin_38739299的博客
04-26 810
Qt有一个跨平台的资源系统,统一管理我们的资源(图片、翻译文本等等),在编译时会将程序运行的资源以二进制的形式嵌入在可执行程序中; 资源文件以.qrc 添加资源文件 使用资源文件 删除资源文件 准备工作 在项目目录中新建image,并把所有资源文件放入 右键项目---->选择 添加新文件(Add New…) 输入资源文件名,选择存放目录 建立好资源后的项目树: 点击 Add PreFix 然后把前缀修改为: / (默认是 “/new/prefix1”) 点击 Add Fi
qt资源文件怎么使用
09-28
Qt中,资源文件(.qrc)是用于存储和管理应用程序中的资源(如图像、字体、样式表等)的文件。您可以按照以下步骤使用Qt资源文件: 1. 打开Qt Designer并创建一个窗体。 2. 在Qt Designer中,选择"File" -> "New ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 2.4.2QT之comboBox下拉框 7443
  • Linux嵌入式学习——c语言选择结构设计 6640
  • 如何在Visual Studio给多行代码进行注释和取消注释 6561
  • 2.4.1QT输入控件组之Line Edit 5582
  • 2.4.4QT输入控件之QTextEdit文本编辑器 5579

分类专栏

  • C语言 12篇
  • 嵌入式学习 32篇
  • QT 16篇
  • C++ 11篇
  • 软件安装 1篇
  • 软件测试 1篇

最新评论

  • Klocwork10–windows安装教程

    Silence~123: 博主能分享一下安装包嘛

  • Klocwork10–windows安装教程

    普通网友: 博主,求一下 klockwork 的安装包吗

  • Klocwork10–windows安装教程

    程序员沃胡: 博主,安装包能分享一下嘛

  • Klocwork10–windows安装教程

    冰封的雪绒: 博主,能够分享一下klockwork的安装包吗

  • Klocwork10–windows安装教程

    晴天-晴天: 求安装包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • C语言--通过指针引用数组
  • C语言-指针变量作为函数参数
  • 2.5.1 QProgressBar 进度条
2023年12篇
2022年23篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最没脑子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司上饶营销网站价格潮州网站开发哪家好宁波网页设计公司楚雄网页设计价格泰安seo网站推广推荐三亚网络广告推广哪家好湘潭网站建设哪家好木棉湾网站改版多少钱梧州网站推广方案价格白银seo网站推广报价南宁网站优化按天扣费价格临沂建网站赣州优化公司阳江百姓网标王推广南山企业网站制作宜宾设计网站推荐仙桃模板推广价格白城网站优化按天计费多少钱坪地seo优化迁安网站优化推广公司防城港网站推广方案价格伊春SEO按效果付费延边高端网站设计推荐宜昌英文网站建设推荐柳州网站搜索优化蚌埠模板网站建设永湖至尊标王价格鹤岗seo优化哪家好济南网站制作推荐襄樊阿里店铺托管报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化