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
目录
相关文章
|
27天前
|
JavaScript 前端开发 安全
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
【QML 与 C++ 之间的通讯机制】QML 与 Qt 通讯:讲解如何在QML 中使用C++类,以及如何在C++ 中获取QML的内容
31 1
|
4月前
|
缓存 API 开发工具
Unity——工程与资源
Unity——工程与资源
|
6月前
|
数据可视化 容器
嵌入式 QT 界面布局管理
嵌入式 QT 界面布局管理
|
存储 人工智能 JSON
HarmonyOS系统中内核实现智慧烟感控制的方法
大家好,今天主要和大家聊一聊,如何利用鸿蒙系统实现智慧烟感方法
150 0
HarmonyOS系统中内核实现智慧烟感控制的方法
|
网络协议 Ubuntu Linux
基于C++(QT框架)设计的网络摄像头项目(支持跨平台运行)
基于C++(QT框架)设计的网络摄像头项目(支持跨平台运行)
863 0
基于C++(QT框架)设计的网络摄像头项目(支持跨平台运行)
|
编译器 C语言 C++
QT 应用编程: 应用程序动态发布
QT 应用编程: 应用程序动态发布
156 0
QT 应用编程: 应用程序动态发布