使用Qt Resource System将resource文件打包进二进制程序
2013-12-31 11:27
417 查看
为什么需要Qt Resource System? 它能帮助我们将所有的resource 文件(图片,qml,等等)都装进我们的程序中。
要做到这点,你需要完成下面的一些步骤:
1. 创建qrc文件,并在pro文件中配置
我有一个resources.qrc文件,在我的gui.pro文件中,我像这样配置
QT += qml quick
TARGET = gui
!android: !ios: !blackberry: qtHaveModule(widgets): QT += widgets
include(src/src.pri)
RESOURCES += \
resources.qrc
HEADERS +=
2. 编辑resources.qrc文件,包含project目录下的所有resource 文件。在我的proejct目录下,我有一些qml文件位于qmls目录和它的子目录,resources.qrc文件在project目录下。一些image文件在images目录下。看我下面的目录树:
├── gui.pro
├── images
│ ├── header.png
│ └── selectedrow.png
├── qmls
│ ├── a.qml
│ ├── main.qml
│ ├── menu.qml
│ ├── props
│ │ ├── input
│ │ │ └── b.qml
│ │ ├── output
│ │ └── processor
│ ├── README
├── resources.qrc
└── src
├── main.cpp
└── src.pri将所有这些resource文件添加到resources.qrc中。<!DOCTYPE RCC>
<RCC version="1.0">
<qresource prefix="/">
<file>qmls/main.qml</file>
<file>qmls/menu.qml</file>
<file>qmls/a.qml</file>
<file>qmls/props/input/b.qml</file>
<file>images/selectedrow.png</file>
<file>images/header.png</file>
</qresource>
</RCC>
所有上面配置的resource文件都会被编译到app的可执行程序中。
3. 在main.cpp中,使用QUrl类加载main.qml文件
QQmlApplicationEngine engine(QUrl("qrc:/qmls/main.qml"));
4. 在qml文件中,使用相对路径去加载其他的resource文件, 比如:Button {
id: saveMenu
anchors.left: openMenu.right
text: "Save"
iconSource: "../images/selectedrow.png"
这就是全部了。当编译你的程序时,Qt会创建qrc_resources.cpp文件,里面包含了静态C++数组,数组中包含了被压缩的来自resource文件的数据。下面的代码片段来自我的project的qrc_resources.cpp文件。#include <QtCore/qglobal.h>
static const unsigned char qt_resource_data[] = {
// /home/dean/work/arcgis-3d-scene-builder/source/builder/gui/qmls/main.qml
0x0,0x0,0x2,0x38,
0x0,
0x0,0xa,0x71,0x78,0x9c,0xdd,0x55,0xdf,0x8f,0x9a,0x40,0x10,0x7e,0xe7,0xaf,0x98,
0xf8,0xd8,0x26,0x4,0xb1,0xb5,0x17,0x12,0xd3,0xf4,0x4c,0xd3,0x36,0x69,0x93,0xb3,
0x5e,0xda,0xbe,0xae,0xcb,0xa8,0x9b,0x2e,0x2c,0xdd,0x1d,0xe2,0x99,0x8b,0xff,0x7b,
0x17,0x4,0x14,0x1,0x83,0xda,0x7b,0xe9,0x3e,0x0,0x3b,0xf3,0xed,0xfc,0xf8,0x76,
0x66,0x10,0x51,0xa2,0x34,0xc1,0x8c,0x66,0xa9,0xe0,0xbf,0xc1,0x77,0x87,0x8e,0xa8,
...
要做到这点,你需要完成下面的一些步骤:
1. 创建qrc文件,并在pro文件中配置
我有一个resources.qrc文件,在我的gui.pro文件中,我像这样配置
QT += qml quick
TARGET = gui
!android: !ios: !blackberry: qtHaveModule(widgets): QT += widgets
include(src/src.pri)
RESOURCES += \
resources.qrc
HEADERS +=
2. 编辑resources.qrc文件,包含project目录下的所有resource 文件。在我的proejct目录下,我有一些qml文件位于qmls目录和它的子目录,resources.qrc文件在project目录下。一些image文件在images目录下。看我下面的目录树:
├── gui.pro
├── images
│ ├── header.png
│ └── selectedrow.png
├── qmls
│ ├── a.qml
│ ├── main.qml
│ ├── menu.qml
│ ├── props
│ │ ├── input
│ │ │ └── b.qml
│ │ ├── output
│ │ └── processor
│ ├── README
├── resources.qrc
└── src
├── main.cpp
└── src.pri将所有这些resource文件添加到resources.qrc中。<!DOCTYPE RCC>
<RCC version="1.0">
<qresource prefix="/">
<file>qmls/main.qml</file>
<file>qmls/menu.qml</file>
<file>qmls/a.qml</file>
<file>qmls/props/input/b.qml</file>
<file>images/selectedrow.png</file>
<file>images/header.png</file>
</qresource>
</RCC>
所有上面配置的resource文件都会被编译到app的可执行程序中。
3. 在main.cpp中,使用QUrl类加载main.qml文件
QQmlApplicationEngine engine(QUrl("qrc:/qmls/main.qml"));
4. 在qml文件中,使用相对路径去加载其他的resource文件, 比如:Button {
id: saveMenu
anchors.left: openMenu.right
text: "Save"
iconSource: "../images/selectedrow.png"
这就是全部了。当编译你的程序时,Qt会创建qrc_resources.cpp文件,里面包含了静态C++数组,数组中包含了被压缩的来自resource文件的数据。下面的代码片段来自我的project的qrc_resources.cpp文件。#include <QtCore/qglobal.h>
static const unsigned char qt_resource_data[] = {
// /home/dean/work/arcgis-3d-scene-builder/source/builder/gui/qmls/main.qml
0x0,0x0,0x2,0x38,
0x0,
0x0,0xa,0x71,0x78,0x9c,0xdd,0x55,0xdf,0x8f,0x9a,0x40,0x10,0x7e,0xe7,0xaf,0x98,
0xf8,0xd8,0x26,0x4,0xb1,0xb5,0x17,0x12,0xd3,0xf4,0x4c,0xd3,0x36,0x69,0x93,0xb3,
0x5e,0xda,0xbe,0xae,0xcb,0xa8,0x9b,0x2e,0x2c,0xdd,0x1d,0xe2,0x99,0x8b,0xff,0x7b,
0x17,0x4,0x14,0x1,0x83,0xda,0x7b,0xe9,0x3e,0x0,0x3b,0xf3,0xed,0xfc,0xf8,0x76,
0x66,0x10,0x51,0xa2,0x34,0xc1,0x8c,0x66,0xa9,0xe0,0xbf,0xc1,0x77,0x87,0x8e,0xa8,
...
相关文章推荐
- 【打包成exe安装包文件发布你的程序】使用QT联系人管理系统的例子
- 使用VS2010开发Qt程序的4点经验(QT4到QT5的升级,更改sln文件,切换工程使用的Qt库,在VS的Solution Explorer视图中建立文件夹)
- 如何把使用命令行或者Eclipse将Java程序打包为jar文件
- 转:使用BinCompiler将资源文件打包成二进制文件
- Qt程序打包成exe可执行文件图文教程
- qt程序打包成单一文件EXE (一)
- 使用installshield——绿色的EXE安装文件打包程序
- C# System.IO.FileStream 读取被其他程序打开的文件提示“文件正由另一进程使用,因此该进程无法访问该文件。”
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
- 使用 Qt InstallFramework 进行程序打包(一)
- 使用WinRar将Qt编译生成的exe和依赖的dll文件打包为一个exe文件的简单方法
- 使用Py2exe将PyQt程序打包为exe文件
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
- windows7下使用py2exe把python打包程序为exe文件
- Qt程序打包成exe可执行文件图文教程
- pyqt5程序使用py2exe打包后运行时报找不到Qt platform plugin ‘windows’错误
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
- 怎样将win平台QT5.4.1-MingW编译的可执行程序打包给其他电脑使用?
- 关于使用Entity Framework时遇到的问题 未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。请确保在应用程序配置文件的“entityFramework”节中注册了该提供程序
- QT学习之阻拦退出程序函数以及事件过滤器的使用,以及文件的操作。