qml有两种启动方式:
1,使用QQmlApplicationEngine 搭配 Window
2,使用QQuickView 搭配 Item
方式1【对窗口的控制权在QML】
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main()函数非常简单,定义了一个QQmlApplicationEngine实例,代表QML引擎,然后load()放在qrc的主QML文档main.qml中。最后就是启动Qt应用的主事件循环:app.exec()。
上面这种启动方式对应Window,所以main.qml的根结构是Window
方式2【对窗口的控制权在C++】
#include <QGuiApplication>
#include <QQuickView>
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
QQuickView viewer;
viewer.setResizeMode(QQuickView::SizeRootObjectToView);
viewer.setSource(QUrl("qrc:/main.qml"));
viewer.show();
return app.exec();
}
上面这种启动方式对应Item,所以main.qml的根结构是Item
如果用上面这种启动,但main.qml的根结构是Window,那会报错,错误内容是:
QQuickView does not support using a window as a root item.
If you wish to create your root window from QML, consider using QQmlApplicationEngine instead.