Qt中rcc工具简介
来源:互联网 发布:nginx 允许目录浏览 编辑:程序博客网 时间:2024/06/05 14:54
Qt 自带的开发工具集里有专门的 rcc 工具,用于将 *.qrc 里面描述的图片、文档等编译成对应的源代码文件 qrc_*.cpp 或者独立的二进制资源文件 *.rcc。下面介绍 rcc 工具的两种用途:
(1)生成独立的二进制资源文件 *.rcc
对于太大的图片、音频、视频等文件,不适合集成到目标程序内部,可以放到操作系统文件路径,或者单独编译成外挂资源 *.rcc 。举例来说,myresource.qrc 包含了很多图片和视频,没法编译成目标程序内嵌资源时,可以打开 Qt 命令行,进入 myresource.qrc 所在的文件夹,执行命令:
那么代码中如何使用 myresource.rcc 呢?需要在 main 函数开始的位置注册这个独立的二进制资源文件:
二进制资源文件 *.rcc 是用于外挂的,其实应用程序里面更常见的是内嵌资源,接下来介绍内嵌使用方式。
(2)应用程序内嵌资源
如果希望一个资源描述文件 application.qrc 在程序编译时内嵌到目标程序里,需要在 *.pro 文件里加一句话:
rcc 工具会解析 application.qrc 内的 XML 文本,找到需要添加的各种文件,默认情况下,rcc 工具会对这些文件做 ZIP 压缩,然后将压缩后的 ZIP 数据的每个字节转换成比如 0x6f, 数值形式,所有文件压缩后的数据对应一个 C++ 静态数组 qt_resource_data[] ,并添加注册、取消注册、初始化、清除等函数和资源描述结构体,最终形成一个 qrc_application.cpp 文件。然后用编译器编译 qrc_application.cpp文件,得到 qrc_applicaotion.o ,链接到目标程序内部,就可以用 ":/images/copy.png" 等形式访问程序内嵌资源了。
注意到刚才向 *.pro 文件里添加 qrc 资源描述文件使用的运算符是 += ,也就是说可以为应用程序添加多个 *.qrc 文件,如果涉及的图片比较多,可以用多个 *.qrc 对图片分类存放:
qmake 为内嵌资源添加的 rcc 编译命令,类似下面这样:
qrc_application.cpp 文件中不仅有各种图片、文档对应的静态数组,还有些结构体和函数,比如初始化和清除函数。
对于 rcc 命令,如果不加 -name application 选项参数,那么在 qrc_application.cpp 里面生成的初始化和清除函数名为:
应用程序的内嵌资源通常不需要手动初始化,但也有例外情况,比如在使用某些链接库中的资源文件时,如果出现使用了正确的文件路径 ":/images/copy.png" 却找不到资源里图片文件的情况,那么需要在使用该资源的类声明里或者在 main 函数里打头的位置加入一句手动初始化:
(1)生成独立的二进制资源文件 *.rcc
对于太大的图片、音频、视频等文件,不适合集成到目标程序内部,可以放到操作系统文件路径,或者单独编译成外挂资源 *.rcc 。举例来说,myresource.qrc 包含了很多图片和视频,没法编译成目标程序内嵌资源时,可以打开 Qt 命令行,进入 myresource.qrc 所在的文件夹,执行命令:
rcc -binary myresource.qrc -o myresource.rcc
rcc 会把 myresource.qrc 里面描述的所有图片、视频等文件,都压缩打包,生成一个二进制的 myresource.rcc 文件,这个 myresource.rcc 包含了所有的资源,这样程序发布时就不需要带一堆乱七八糟的碎文件了,一个 myresource.rcc 搞定。那么代码中如何使用 myresource.rcc 呢?需要在 main 函数开始的位置注册这个独立的二进制资源文件:
QResource::registerResource("/path/to/myresource.rcc");
然后也是使用之前类似的虚拟文件路径,比如 ":/images/copy.png" 、":/images/cat.gif" 。二进制资源文件 *.rcc 是用于外挂的,其实应用程序里面更常见的是内嵌资源,接下来介绍内嵌使用方式。
(2)应用程序内嵌资源
如果希望一个资源描述文件 application.qrc 在程序编译时内嵌到目标程序里,需要在 *.pro 文件里加一句话:
RESOURCES += application.qrc
qmake 会自动根据这句话,为 application.qrc 添加编译脚本,其编译过程如下图所示:注意到刚才向 *.pro 文件里添加 qrc 资源描述文件使用的运算符是 += ,也就是说可以为应用程序添加多个 *.qrc 文件,如果涉及的图片比较多,可以用多个 *.qrc 对图片分类存放:
RESOURCES += buttons.qrc
RESOURCES += backgrounds.qrc
使用多个 *.qrc 与使用一个 *.qrc 的方式是一样的,虚拟文件路径都类似 ":/buttons/ok.png" 、":/backgrounds/bgmain.png" 等,这里的 ok.png 放在项目文件夹的 buttons 子文件夹里,而 bgmain.png 是放在项目文件夹的 backgrounds 子文件夹里,因此两个文件的路径是不同的。RESOURCES += backgrounds.qrc
qmake 为内嵌资源添加的 rcc 编译命令,类似下面这样:
rcc -name application application.qrc -o qrc_application.cpp
得到 qrc_application.cpp 源文件之后,剩下的编译、链接就与普通 .cpp 文件一模一样了。qrc_application.cpp 文件中不仅有各种图片、文档对应的静态数组,还有些结构体和函数,比如初始化和清除函数。
对于 rcc 命令,如果不加 -name application 选项参数,那么在 qrc_application.cpp 里面生成的初始化和清除函数名为:
int QT_RCC_MANGLE_NAMESPACE(qInitResources)();
int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)();
如果加了 -name application 选项参数,那么资源的初始化和清除函数名变为:int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)();
int QT_RCC_MANGLE_NAMESPACE(qInitResources_application)();
int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_application)();
QT_RCC_MANGLE_NAMESPACE() 这个宏其实没什么用,仅用于提示作用。资源的初始化函数和清除函数会在资源加载和卸载时自动被调用。int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_application)();
应用程序的内嵌资源通常不需要手动初始化,但也有例外情况,比如在使用某些链接库中的资源文件时,如果出现使用了正确的文件路径 ":/images/copy.png" 却找不到资源里图片文件的情况,那么需要在使用该资源的类声明里或者在 main 函数里打头的位置加入一句手动初始化:
Q_INIT_RESOURCE(resources);
resources 是指 resources.qrc 的简短名字形式,不需要扩展名。
转载自:https://lug.ustc.edu.cn/sites/qtguide/
原作者:Winland(winland0704@126.com)
0 0
- Qt中rcc工具简介
- STM32中RCC时钟简介
- STM32中RCC时钟简介
- STM32中RCC时钟简介
- vs中使用qt的qrc生成rcc资源文件
- QT 开发工具简介
- Qt动态加载RCC资源
- RCC
- RCC
- qt中的qrc文件和rcc文件
- Qt 使用Rcc发布资源文件
- qt中dumpdoc工具
- Qt Resource System Qt资源体系(qrc rcc)
- QT中QWidget类简介
- vs+qt uic rcc 系统找不到指定的路径
- QT中Model/View模型简介
- qt中设置按钮工具提示信息
- QT中 uic 工具的使用
- libevent2.0源码学习三:对网络模型的(EPOLL)的封装
- 数据结构C语言实现之链式队列的6种算法代码
- 地图投影知识系列(二)---区域地图投影
- jsp页面中注释 <!-- --> 和<%-- --%> 的区别
- ps命令
- Qt中rcc工具简介
- Android WebView shouldInterceptRequest 异步加载
- oracle按code编码长度查询代码展现层级关系(给字段前加空格)
- 关于spring3.0 后的 事务注解管理指定数据源问题
- Unsupported major.minor version 51.0
- java 远程提交MR jar包并获得application_id
- Mysql技术内幕基础部分
- SQL语句--like和正则表达式的使用
- java数据类型转换汇总