QML使用资源系统

简介: 简述Qt 资源系统允许将资源文件作为二进制文件存储在可执行文件中,这在构建混合的 QML/C++ 应用程序时非常有用,因为它通过资源系统的 URI 方案引用 QML 文件(以及其他资源,例如:图片和声音文件),而不是文件系统资源的相对路径或绝对路径。简述使用资源系统实际应用版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.n

简述

Qt 资源系统允许将资源文件作为二进制文件存储在可执行文件中,这在构建混合的 QML/C++ 应用程序时非常有用,因为它通过资源系统的 URI 方案引用 QML 文件(以及其他资源,例如:图片和声音文件),而不是文件系统资源的相对路径或绝对路径。

版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820

使用资源系统

要在混合的 QML/C++ 应用程序中使用资源系统:

  • 创建一个 .qrc 资源集合文件(以 XML 格式列出资源文件)
  • 从 C++ 中,加载主 QML 文件(使用 :/prefix 将其作为一个资源,或使用 qrc 方案将其作为一个 URL)

一旦完成该过程,QML 中以相对路径指定的文件都将从资源系统中加载。资源系统的使用对 QML 层完全透明,这意味着所有的 QML 代码应该使用相对路径引用资源文件,而不是使用 qrc 方案。该方案只应在 C++ 代码中使用,来引用资源文件。

注意: 如果使用资源系统,那么只要更改 QML 源文件,就必须重新编译应用程序,以便更新包中的资源。

实际应用

来看一个简单的示例,在 QML 中加载一张炫酷的图片(Logo ~O(∩_∩)O~)。

这里写图片描述

应用程序的目录结构如下所示:

  • project/
    • project.pro
    • main.cpp
    • main.qml
    • resource.qrc
    • images/
      • background.png

main.qml 和 background.png 将被打包为资源文件,这是在 resource.qrc 中完成的:

<!DOCTYPE RCC>
<RCC version="1.0">

<qresource prefix="/">
    <file>main.qml</file>
    <file>images/background.png</file>
</qresource>

</RCC>

由于 background.png 是一个资源文件,main.qml 可以使用 resource.qrc 中指定的相对路径来引用它:

import QtQuick 2.3

Image { source: "images/background.png" }

为了让 QML 正确地定位资源文件,main.cpp 使用 qrc 方案将主 QML 文件(main.qml) 加载为资源文件:

#include <QGuiApplication>
#include <QQuickView>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    // 创建一个基于 QWindow 的视图,来显示 QML 的内容
    QQuickView view;
    view.setSource(QUrl("qrc:/main.qml"));
    view.show();

    return app.exec();
}

最后,project.pro 使用 RESOURCES 变量来指示 resource.qrc 应该被用于构建应用程序资源:

# 告诉 qmake 这是一个应用程序
TEMPLATE = app

# 声明了要从 C++ 使用的 Qt 库
QT += qml quick
CONFIG += c++11

SOURCES += main.cpp

# 告诉 qmake 该资源集合应该被内置到可执行文件中
RESOURCES += resource.qrc
目录
相关文章
|
8月前
|
XML 编解码 开发工具
《移动互联网技术》第六章 资源管理: 掌握定制控件样式、界面主题、可绘制资源程序的编写方法
《移动互联网技术》第六章 资源管理: 掌握定制控件样式、界面主题、可绘制资源程序的编写方法
29 0
|
18天前
|
JavaScript 前端开发 安全
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
74 1
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
|
测试技术
解决duilib使用zip换肤卡顿的问题(附将资源集成到程序中的操作方法)
转载请说明原出处,谢谢~~        今天在做单子是,客户要求做换肤功能,为此我专门写了一个换肤函数,并且把各种皮肤资源压缩为各个zip文件来换肤。
1050 0
|
编译器 C语言 C++
QT 应用编程: 应用程序动态发布
QT 应用编程: 应用程序动态发布
160 0
QT 应用编程: 应用程序动态发布
|
前端开发 索引
|
Android开发 计算机视觉 Windows
基于qml创建最简单的图像处理程序(1)-基于qml创建界面
《基于qml创建最简单的图像处理程序》系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/8343310.
1233 0
|
程序员 开发工具 Android开发