QML运行环境

简介: 简述QML 文档由 QML 运行环境加载和执行。这包括 Declarative UI 引擎以及内置的 QML 类型和插件模块,并且它还提供了对第三方 QML 类型和模块的访问。使用 QML 的应用程序,需要调用 QML 运行环境才能执行 QML 文档。这可以通过创建 QQuickView 或 QQmlEngine 来完成。此外,Declarative UI 包包含了

简述

QML 文档由 QML 运行环境加载和执行。这包括 Declarative UI 引擎以及内置的 QML 类型和插件模块,并且它还提供了对第三方 QML 类型和模块的访问。

使用 QML 的应用程序,需要调用 QML 运行环境才能执行 QML 文档。这可以通过创建 QQuickView 或 QQmlEngine 来完成。此外,Declarative UI 包包含了 qmlscene 工具,用于加载 .qml 文件。此工具对于开发和测试 QML 代码非常有用,无需编写 C++ 应用程序即可加载 QML 运行环境。

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

使用 QML Scene 搭建原型

Declarative UI 包包含了一个 QML 运行时工具 - qmlscene,用于加载和显示 QML 文档。这在应用程序开发阶段非常有用,可以针对基于 QML 的应用程序进行原型设计,而无需编写 C++ 代码。

例如,有一个 QML 文件 main.qml:

import QtQuick 2.3

Rectangle {
    width: 300
    height: 300
    color: "lightgray"

    Text {
        anchors.centerIn: parent
        text: "Hello, QML!"
    }
}

关于 main.qml 的详细介绍,可参考:值得纪念的时刻 - Hello, QML!

运行 qmlscene 工具(位于 bin 目录中),选择我们的 QML 文件。

这里写图片描述

点击“打开”按钮,即可运行。

这里写图片描述

当然,也可以使用命令行运行,以 main.qml 作为参数。键入:

qmlscene main.qml

注意: 如果不是使用绝对路径来执行 qmlscene,则需要在环境变量中加入其所在目录。

在应用程序中初始化 QML 运行环境

要运行一个使用 QML 的应用程序,QML 运行环境必须由应用程序调用。这可以通过编写一个 Qt C++ 应用程序来完成,该程序可以通过以下两种方式来加载 QQmlEngine:

  • 通过 QQuickView 加载 QML 文件
  • 创建一个 QQmlEngine,并使用 QQmlComponent 加载 QML 文件

用 QQuickView 初始化

QQuickView 是一个基于 QWindow 的类,能够加载 QML 文件。

例如,将上述的 main.qml 加载到 Qt 应用程序的 main.cpp 文件,像这样:

#include <QGuiApplication>
#include <QQuickView>

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

    QQuickView view;
    view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
    view.show();

    return app.exec();
}

这将创建一个基于 QWindow 的视图,来显示 main.qml 的内容。

应用程序的 .pro 项目文件包含了 qmake 生成 Makefile(用于编译和链接应用程序)所需的所有信息:

# 告诉 qmake 这是哪种项目,由于构建的是一个应用程序,因此使用 app 模板
TEMPLATE = app

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

# 构建项目需要一个 C++11 兼容的编译器
CONFIG += c++11

# 列出了应该编译的所有源文件,类似的变量 HEADERS 可用于头文件。
SOURCES += main.cpp

# 告诉 qmake 有一个资源集合,应该被内置到可执行文件中。
RESOURCES += qml.qrc

直接创建 QQmlEngine

如果 main.qml 中没有任何图形组件,或者存在其他原因希望避免使用 QQuickView,可以直接构造 QQmlEngine。这种情况下,main.qml 将作为一个 QQmlComponent 实例被加载,而不是被放入一个 view 中:

#include <QGuiApplication>
#include <QQmlEngine>
#include <QQmlContext>
#include <QQmlComponent>

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

    QQmlEngine engine;
    QQmlContext *objectContext = new QQmlContext(engine.rootContext());

    QQmlComponent component(&engine, "qrc:/main.qml");
    QObject *object = component.create(objectContext);

    // 在必要时,删除 object 和 objectContext

    return app.exec();
}

如果不使用 Qt Quick 中的任何图形项,那么,上述代码中的 QGuiApplication 可以由 QCoreApplication 来代替。这样以来,就可以将 QML 作为一种语言来使用,而无需依赖 Qt GUI 模块。

目录
相关文章
|
7月前
|
开发框架 自然语言处理 Linux
Qt:构建强大跨平台应用程序的框架
Qt:构建强大跨平台应用程序的框架
|
4月前
|
IDE Linux Android开发
跨平台编译
跨平台编译
48 0
|
6月前
Qml:qml写个登录
Qml:qml写个登录
|
Linux 开发工具 git
[笔记]ubuntun18.0+clion+qt5 搭建跨平台应用环境
[笔记]ubuntun18.0+clion+qt5 搭建跨平台应用环境
185 0
Qt三方库开发技术:QXlsx介绍、编译和使用
Qt三方库开发技术:QXlsx介绍、编译和使用
Qt三方库开发技术:QXlsx介绍、编译和使用
|
网络安全 开发工具 Android开发
qt 配置安卓开发环境
qt 配置安卓开发环境
150 0
|
开发框架 前端开发 JavaScript
构建跨平台桌面应用:Electron和Qt的比较
当谈到构建跨平台桌面应用程序时,开发人员常常会面临一个重要的选择:Electron和Qt。这两个框架都提供了强大的工具和库来开发跨平台应用程序,但它们在设计理念、技术栈和生态系统方面存在一些区别。本文将比较Electron和Qt,并探讨它们的优势和不足之处,以帮助开发人员在选择适合自己项目的框架时做出明智的决策。
5900 0
|
Ubuntu Unix C语言
Qt三方库开发技术(一):QuaZIP介绍、编译和使用
Qt三方库开发技术(一):QuaZIP介绍、编译和使用
Qt三方库开发技术(一):QuaZIP介绍、编译和使用
|
Java 图形学 开发者
Java开发GUI之图形绘制
Java开发GUI之图形绘制
202 0
Java开发GUI之图形绘制