ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT软件开发之基础控件--2.3 QT资源文件

2021-10-14 22:03:18  阅读:291  来源: 互联网

标签:控件 qrc QT 文件 -- image png 资源 rcc


2.3 QT资源文件

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

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

2.3.1 建立资源文件

(1)先打开 QtCreator,新建一个 Qt Widgets Application 项目,继承Qwidget类,项目名称为FesourceFile。

     (2)鼠标选中工程左边的项目视图文件夹,单击鼠标右键添加新的文件。

 图2-23 添加新文件

(3)选择QT资源文件

图2-24 选择新建资源文件类型

(4)设置资源文件的名称和存放路径

图2-25 设置资源文件的名称

(5)将资源文件添加到当前的项目中

图2-26 添加资源文件到项目中

(6)向资源文件中添加需要内嵌到程序的文件 

图2-27 添加文件

(7)资源文件管理器

鼠标选中qrc资源文件,右键->open with-->选择打开资源文件的方式。资源管理器可以修改资源文件的访问路径和别名(程序内部使用的名称)。

 图2-28 打开资源文件方式及资源文件编辑

(8)查看资源文件在程序中的访问路径

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

图2-29 资源文件的访问路径

2.3.2 qrc文件格式

qrc文件的格式与ui文件一样都是XML格式。上一步建立的image.qrc资源文件内容如下:

<RCC>
    <qresource prefix="/">
        <file>image/b_close.png</file>
        <file>image/b_ok.png</file>
    </qresource>
</RCC>

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

<file>image/b_close.png</file> :表示资源文件访问的路径。

可以手动修改资源文件内容进行添加新文件。 image.qrc通过rcc工具编译后会生成一个qrc_image.cpp文件。

2.3.3 设置按钮图标

设置按钮图标可以通过UI设计师设置,也可以通过setIcon函数进行设置。

(1)通过UI设计师设置按钮图标示例

 图2-30 添加按钮图标

(2)通过代码方式设置按钮图标示例(配套程序编号CH2-6)

ui->pushButton_ok->setIcon(QIcon(":/image/b_ok.png"));
ui->pushButton_close->setIcon(QIcon(":/image/b_close.png"));

效果图:

图2-31 图标运行效果图

2.3.4 外挂资源文件

较大的资源文件一般不编译链接到应用程序内部,可以使用rcc命令编译成单独的资源文件,在程序中进行调用。

rcc工具在QT的安装目录下,比如:C:\Qt\QT5.7.0_MIGW\5.7\mingw53_32\bin。rcc命令工具需要在命令行中使用,还需要将rcc工具的路径添加到电脑系统的PATH环境变量中。环境变量添加后重启电脑即可永久生效。

以下截图是添加环境变量的步骤(win10系统):

 图2-31 添加环境变量(win10系统)

1.新建一个qrc格式的文本文件,名称为external_reseouce.qrc,内容如下:

<RCC>
    <qresource prefix="/">
        <file>image/b_close.png</file>
        <file>image/b_ok.png</file>
        <file>video/bs.mp4</file>
    </qresource>
</RCC>

 2.文件夹的布局

  图2-32 新建资源文件

3.编译资源文件

打开命令行窗口,进入到资源文件存放的路径下,输入以下命令进行编译:

rcc -binary external_reseouce.qrc -o external_reseouce.rcc

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

 图2-33 编译资源文件过程

4.引用资源文件

引用外部资源需要在main函数里进行注册,之后在程序中引用方式与前面讲的内嵌资源访问形式一样。

注册资源文件需要使用registerResource静态函数,原型如下。

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功能相反,用来注销不使用的资源。

注册资源文件的格式示例

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

完整代码示例(配套程序编号CH2-7)

#include "widget.h"
#include <QApplication>
#include <QResource>
int main(int argc, char *argv[])
{
    QResource::registerResource("external_reseouce.rcc"); //资源文件路径根据实际路径填写
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

引用示例

ui->pushButton_ok->setIcon(QIcon(":/image/b_ok.png"));
ui->pushButton_close->setIcon(QIcon(":/image/b_close.png"));

运行效果图

图2-34外挂资源运行效果图

标签:控件,qrc,QT,文件,--,image,png,资源,rcc
来源: https://blog.csdn.net/xiaolong1126626497/article/details/120760945

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有