QQmlApplicationEngine 类

QQmlApplicationEngine 提供了一种便捷的方式从单个 QML 文件中加载应用程序。 更多信息...

头文件 #include <QQmlApplicationEngine>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += qml
继承自 QQmlEngine

公共函数

QQmlApplicationEngine(QObject *parent = nullptr)
QQmlApplicationEngine(const QUrl &url, QObject *parent = nullptr)
(自 6.5) QQmlApplicationEngine(QAnyStringView uri, QAnyStringView typeName, QObject *parent = nullptr)
QQmlApplicationEngine(const QString &filePath, QObject *parent = nullptr)
virtual~QQmlApplicationEngine() override
QList<QObject *>rootObjects() const

公共槽

voidload(const QUrl &url)
voidload(const QString &filePath)
voidloadData(const QByteArray &data, const QUrl &url = QUrl())
(自 6.5) voidloadFromModule(QAnyStringView uri, QAnyStringView typeName)
(自 6.0) voidsetExtraFileSelectors(const QStringList &extraFileSelectors)
voidsetInitialProperties(const QVariantMap &initialProperties)

信号

voidobjectCreated(QObject *object, const QUrl &url)
(自 6.4) voidobjectCreationFailed(const QUrl &url)

详细描述

此类结合了一个 QQmlEngineQQmlComponent,提供了一种方便的方式从单个 QML 文件中加载应用程序。它还向 QML 暴露了一些中心应用程序功能,这些功能在 C++/QML 混合应用程序中通常从 C++ 控制。

它可以这样使用

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine("main.qml");
    return app.exec();
}

QQuickView 不同,QQmlApplicationEngine 不会自动创建根窗口。如果您正在使用 Qt Quick 的视觉项,您需要将它们放入 Window 中。

您还可以与QQmlApplicationEngine一起使用QCoreApplication,如果您没有使用需要QGuiApplication(例如QtQuick)的任何QML模块。

默认QQmlEngine的配置更改列表

  • 将Qt.quit()连接到QCoreApplication::quit()
  • 从与主QML文件相邻的i18n目录自动加载翻译文件。
    • 翻译文件必须以"qml_"前缀,例如 qml_ja_JP.qm。
  • 当修改QJSEngine::uiLanguage / Qt.uiLanguage属性时,会重新加载翻译。
  • 如果场景包含QQuickWindow,则自动设置孵化控制器。
  • 自动将QQmlFileSelector作为URL拦截器设置,将文件选择器应用于所有QML文件和资产。

可以通过使用从QQmlEngine继承的方法进一步调整引擎的行为。

成员函数文档

QQmlApplicationEngine::QQmlApplicationEngine(QObject *parent = nullptr)

创建一个具有给定parent的新QQmlApplicationEngine。您稍后需要调用load()来加载一个QML文件。

QQmlApplicationEngine::QQmlApplicationEngine(const QUrl &url, QObject *parent = nullptr)

创建一个新的QQmlApplicationEngine并加载给定url处的QML文件。这仅作为一种方便,与使用空构造函数并在之后调用load相同。

[显式,自6.5以来] QQmlApplicationEngine::QQmlApplicationEngine(QAnyStringView uri, QAnyStringView typeName, QObject *parent = nullptr)

创建一个新的QQmlApplicationEngine并加载由uritypeName指定的QML类型。这仅作为一种方便,与使用空构造函数并在之后调用loadFromModule相同。

此函数是在Qt 6.5中引入的。

QQmlApplicationEngine::QQmlApplicationEngine(const QString &filePath, QObject *parent = nullptr)

创建一个QQmlApplicationEngine并加载给定filePath处的QML文件,该文件必须是本地文件路径。如果给定的是相对路径,则它将被解释为相对于应用程序的工作目录。

这仅作为一种方便,与使用空构造函数并在之后调用load相同。

[虚函数重载非异常] QQmlApplicationEngine::~QQmlApplicationEngine()

销毁QQmlApplicationEngine及其加载的所有QML对象。

[槽] void QQmlApplicationEngine::load(const QUrl &url)

加载位于url的根QML文件。对于本地文件URL,立即创建由文件定义的对象树。远程URL异步加载,监听objectCreated信号以确定对象树何时就绪。

如果发生错误,将发出带 null 指针参数的 objectCreated 信号,并使用 qWarning 打印错误消息。

[slot] void QQmlApplicationEngine::load(const QString &filePath)

加载位于 filePath 的根 QML 文件。 filePath 必须是本地文件的路径。如果 filePath 是相对路径,它被视为相对于应用程序的工作目录。由文件定义的对象树将立即实例化。

如果发生错误,将使用 qWarning 打印错误消息。

[slot] void QQmlApplicationEngine::loadData(const QByteArray &data, const QUrl &url = QUrl())

加载 data 中给定的 QML。由 data 定义的对象树将立即实例化。

如果指定了 url,它将被用作组件的基本 URL。这会影响数据中的相对路径和错误消息。

如果发生错误,将使用 qWarning 打印错误消息。

[slot, since 6.5] void QQmlApplicationEngine::loadFromModule(QAnyStringView uri, QAnyStringView typeName)

从由 uri 指定的模块加载 QML 类型 typeName。如果类型来自位于远程 url 的 QML 文件,类型将以异步方式加载。监听 objectCreated 信号以确定对象树何时准备就绪。

如果发生错误,将发出带 null 指针参数的 objectCreated 信号,并使用 qWarning 打印错误消息。

QQmlApplicationEngine engine;
engine.loadFromModule("QtQuick", "Rectangle");

注意:通过 uri 识别的模块将在 导入路径 中搜索,就像你在 QML 文件内部执行 import uri 一样。如果无法在那里找到模块,该函数将失败。

此函数是在Qt 6.5中引入的。

另请参阅:QQmlComponent::loadFromModule.

[signal] void QQmlApplicationEngine::objectCreated(QObject *object, const QUrl &url)

当对象加载完成时,发出此信号。如果加载成功,object 包含指向已加载对象的指针,否则指针为 NULL。

还提供了 object 所来自的组件的 url

注意:如果组件的路径以包含相对路径的 QString 提供的,则 url 将包含指向文件的完全解析路径。

[signal, since 6.4] void QQmlApplicationEngine::objectCreationFailed(const QUrl &url)

当因错误而加载完成时,发出此信号。

提供作为参数的加载失败的组件的 url

QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;

// exit on error
QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed,
    &app, []() { QCoreApplication::exit(-1); }, Qt::QueuedConnection);
engine.load(QUrl());
return app.exec();

注意:如果组件的路径以包含相对路径的 QString 提供的,则 url 将包含指向文件的完全解析路径。

另请参阅:QQmlApplicationEngine::objectCreated,此信号会在此信号发生(尽管创建失败)时发出。

此功能是在 Qt 6.4 中引入的。

QList<QObject *> QQmlApplicationEngine::rootObjects() const

返回由 QQmlApplicationEngine 实例化的所有根对象列表。这仅包含通过 load() 或便捷构造函数加载的对象。

注意:在 Qt 5.9 之前的版本中,此函数标记为非 const

[slot, since 6.0] void QQmlApplicationEngine::setExtraFileSelectors(const QStringList &extraFileSelectors)

设置要传递给用于解析本地文件 URL 的内部 QQmlFileSelectorextraFileSelectors。在加载第一个 QML 文件时应用这些 extraFileSelectors。之后设置它们没有效果。

此函数是在 Qt 6.0 中引入的。

另请参阅QQmlFileSelectorQFileSelector::setExtraSelectors

[slot] void QQmlApplicationEngine::setInitialProperties(const QVariantMap &initialProperties)

设置 initialProperties,以初始化加载后的 QML 组件。

QQmlApplicationEngine engine;

EventDatabase eventDatabase;
EventMonitor eventMonitor;

engine.setInitialProperties({
    { "eventDatabase", QVariant::fromValue(&eventDatabase) },
    { "eventMonitor", QVariant::fromValue(&eventMonitor) }
});

另请参阅QQmlComponent::setInitialPropertiesQQmlApplicationEngine::loadQQmlApplicationEngine::loadData

© 2024 The Qt Company Ltd. 本文档贡献的内容的版权属于其各自的所有者。本文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款提供许可。Qt 及其相应标志是 The Qt Company Ltd. 在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。