QQmlApplicationEngine 类
QQmlApplicationEngine 提供了一种便捷的方式从单个 QML 文件中加载应用程序。 更多信息...
头文件 | #include <QQmlApplicationEngine> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake | QT += 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 |
公共槽
void | load(const QUrl &url) |
void | load(const QString &filePath) |
void | loadData(const QByteArray &data, const QUrl &url = QUrl()) |
(自 6.5) void | loadFromModule(QAnyStringView uri, QAnyStringView typeName) |
(自 6.0) void | setExtraFileSelectors(const QStringList &extraFileSelectors) |
void | setInitialProperties(const QVariantMap &initialProperties) |
信号
void | objectCreated(QObject *object, const QUrl &url) |
(自 6.4) void | objectCreationFailed(const QUrl &url) |
详细描述
此类结合了一个 QQmlEngine 和 QQmlComponent,提供了一种方便的方式从单个 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并加载由uri和typeName指定的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 的内部 QQmlFileSelector 的 extraFileSelectors。在加载第一个 QML 文件时应用这些 extraFileSelectors。之后设置它们没有效果。
此函数是在 Qt 6.0 中引入的。
另请参阅QQmlFileSelector 和 QFileSelector::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::setInitialProperties、QQmlApplicationEngine::load 和 QQmlApplicationEngine::loadData。
© 2024 The Qt Company Ltd. 本文档贡献的内容的版权属于其各自的所有者。本文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款提供许可。Qt 及其相应标志是 The Qt Company Ltd. 在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。