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

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)鼠标选中工程左边的项目视图文件夹,单击鼠标右键添加新的文件。

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

 图2-23 添加新文件

(3)选择QT资源文件

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

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

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

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

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

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

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

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

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

QT软件开发之基础控件--2.3 QT资源文件图2-27 添加文件

(7)资源文件管理器

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

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

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

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

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

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

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

图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设计师设置按钮图标示例

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

 图2-30 添加按钮图标

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

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

效果图:

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

图2-31 图标运行效果图

2.3.4 外挂资源文件

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

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

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

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

 图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.文件夹的布局

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

  图2-32 新建资源文件

3.编译资源文件

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

rcc -binary external_reseouce.qrc -o external_reseouce.rcc

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

 图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"));

运行效果图

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

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

上一篇:攻防世界-music-高手进阶区-miscmisc


下一篇:uniapp原生tabbar设置并添加数字角标或小红点提示