PySide6.QtQml.QQmlApplicationEngine

class QQmlApplicationEngine

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

PySide6.QtQml.QQmlApplicationEngine 的继承图

概要

方法

插槽

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

该类结合了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中。

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

从默认的QQmlEngine 的配置更改列表:

  • 连接Qt。 quit() 到 QCoreApplication::quit()

  • 自动从与主QML文件相邻的i18n目录加载翻译文件。

    • 翻译文件必须具有“qml_”前缀,例如 qml_ja_JP.qm。

  • QJSEngine::uiLanguage / Qt.uiLanguage属性更改时,翻译会重新加载。

  • 如果场景包含QQuickWindow,则自动设置孵化控制器。

  • 自动设置一个QQmlFileSelector作为URL拦截器,将文件选择器应用于所有QML文件和资源。

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

__init__([parent=None])
Parameters:

父对象QObject

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

__init__(filePath[, parent=None])
Parameters:
  • filePath – str

  • parentQObject

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

这是为了方便提供的,与使用空构造函数并在之后调用load相同。

__init__(url[, parent=None])
Parameters:

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

__init__(uri, typeName[, parent=None])
Parameters:
  • uri – 字符串

  • typeName – str

  • parentQObject

创建一个新的QQmlApplicationEngine并加载由uritypeName指定的QML类型。这是为了方便提供的,与使用空构造函数并随后调用loadFromModule相同。

load(filePath)
Parameters:

filePath – str

加载位于 filePath 的根 QML 文件。filePath 必须是本地文件的路径或资源文件系统中的文件路径。如果 filePath 是相对路径,则相对于应用程序的工作目录。文件中定义的对象树会立即实例化。

如果发生错误,错误信息将通过qWarning打印。

load(url)
Parameters:

urlQUrl

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

如果发生错误,objectCreated 信号会以空指针作为参数发出,并使用 qWarning 打印错误消息。

loadData(data[, url=QUrl()])
Parameters:

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

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

如果发生错误,错误信息将通过 qWarning 打印。

loadFromModule(uri, typeName)
Parameters:
  • uri – 字符串

  • typeName – str

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

如果发生错误,objectCreated 信号会以空指针作为参数发出,并使用 qWarning 打印错误消息。

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

注意

通过uri标识的模块在import path中搜索,就像你在QML文件中执行import uri一样。如果无法在该路径中找到模块,此函数将失败。

另请参阅

loadFromModule

objectCreated(object, url)
Parameters:

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

组件来源的url也提供了object

注意

如果组件的路径是作为包含相对路径的QString提供的,url将包含文件的完全解析路径。

objectCreationFailed(url)
Parameters:

urlQUrl

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

加载失败的组件的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将包含文件的完全解析路径。

另请参阅 objectCreated ,即使创建失败,也会发出此信号。

rootObjects()
Return type:

QObject的列表

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

注意

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

setExtraFileSelectors(extraFileSelectors)
Parameters:

extraFileSelectors – 字符串列表

设置要传递给内部QQmlFileSelectorextraFileSelectors,用于将URL解析为本地文件。extraFileSelectors在加载第一个QML文件时应用。之后设置它们将无效。

另请参阅

QQmlFileSelector setExtraSelectors

setInitialProperties(initialProperties)
Parameters:

initialProperties – 字典,键类型为 .QString,值类型为 QVariant。

设置initialProperties,用于在QML组件加载后初始化。

QQmlApplicationEngine engine;

EventDatabase eventDatabase;
EventMonitor eventMonitor;

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