一、描述
QQmlApplicationEngine 继承自 QQmlEngine,结合了 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 内。
如果不使用任何需要 QGuiApplication 的 QML 模块,也可以将 QCoreApplication 与 QQmlApplicationEngine 一起使用。
二、成员函数
1、QQmlApplicationEngine(const QString &filePath, QObject *parent = nullptr)
QQmlApplicationEngine(const QUrl &url, QObject *parent = nullptr)
创建一个新的 QQmlApplicationEngine 并在给定的 filePath 加载 QML 文件。
QQmlApplicationEngine(QObject *parent = nullptr)
使用给定的父级创建一个新的 QQmlApplicationEngine。必须稍后调用 load() 才能加载 QML 文件。
2、void load(const QString &filePath)
加载位于 filePath 的根 QML 文件。
filePath 必须是本地文件的路径。 如果 filePath 是相对路径,则将其视为相对于应用程序的工作目录。
文件定义的对象树立即实例化。
void load(const QUrl &url)
加载位于 url 的根 QML 文件。文件定义的对象树会立即为本地文件 url 创建。远程 url 是异步加载的,监听 objectCreated 信号以确定对象树何时准备好。
如果发生错误,则使用空指针作为参数发出 objectCreated 信号。
3、void loadData(const QByteArray &data, const QUrl &url = QUrl())
加载data中给定的 QML。由data定义的对象树立即实例化。
4、【信号】void objectCreated(QObject *object, const QUrl &url)
当object完成加载时会发出此信号。如果加载成功,object 包含指向加载对象的指针,否则该指针为 nullptr。
还提供了对象来源的组件的 url。
5、void setExtraFileSelectors(const QStringList &extraFileSelectors)
将 extraFileSelector 设置为传递给用于将 URL 解析为本地文件的内部 QQmlFileSelector。加载第一个 QML 文件时应用 extraFileSelectors。之后设置它们没有效果。
6、void setInitialProperties(const QVariantMap &initialProperties)
设置 QML 组件在加载后初始化的属性。
QQmlApplicationEngine engine;
EventDatabase eventDatabase;
EventMonitor eventMonitor;
engine.setInitialProperties({
{ "eventDatabase", QVariant::fromValue(&eventDatabase) },
{ "eventMonitor", QVariant::fromValue(&eventMonitor) }
});
7、QList<QObject *> rootObjects()
返回由 QQmlApplicationEngine 实例化的所有根对象的列表。