[英]How to close a window in QML/Javascript code (with C++ code involved)?
[英]Create separate QML window from C++ code
在我的應用程序中,我想用C ++代碼創建另一個帶有QML UI的窗口。
我知道可以使用QML Window類型創建另一個窗口,但我需要C ++代碼中的相同內容。
到目前為止,我設法將我的額外qml文件加載到QQmlComponent:
QQmlEngine engine;
QQmlComponent component(&engine);
component.loadUrl(QUrl(QStringLiteral("qrc:/testqml.qml")));
if ( component.isReady() )
component.create();
else
qWarning() << component.errorString();
如何在單獨的窗口中顯示它?
您可以使用一個QQmlEngine
實現這一QQmlEngine
。 按照您的代碼,您可以執行以下操作:
QQmlEngine engine;
QQmlComponent component(&engine);
component.loadUrl(QUrl(QStringLiteral("qrc:/main.qml")));
if ( component.isReady() )
component.create();
else
qWarning() << component.errorString();
component.loadUrl(QUrl(QStringLiteral("qrc:/main2.qml")));
if ( component.isReady() )
component.create();
else
qWarning() << component.errorString();
我更喜歡QQmlApplicationEngine
。 該類結合了QQmlEngine
和QQmlComponent
,提供了一種加載單個QML文件的便捷方式。 如果您有機會使用QQmlApplicationEngine
那么您將擁有更少的代碼行。
例:
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
engine.load(QUrl(QStringLiteral("qrc:/main2.qml")));
return app.exec();
我們也可以使用QQuickView
。 QQuickView
只支持根對象的裝載,從獲得QQuickItem
所以在這種情況下,我們的qml
文件無法開始與QML類型ApplicationWindow
或Window
就像上面的例子。 所以在這種情況下,我們的main
可能是這樣的:
QGuiApplication app(argc, argv);
QQuickView view;
view.setSource(QUrl("qrc:/main.qml"));
view.show();
QQuickView view2;
view2.setSource(QUrl("qrc:/main2.qml"));
view2.show();
return app.exec();
您可以嘗試創建新的QQmlEngine
對於任何好奇的人,我最終用稍微不同的方法來解決問題。
我的根QML文檔現在看起來像這樣:
import QtQuick 2.4
Item {
MyMainWindow {
visible: true
}
MyAuxiliaryWindow {
visible: true
}
}
其中MainWindow
是具有根元素ApplicationWindow
的QML組件,而AuxiliaryWindow
是具有根元素Window
的組件。
工作正常,您不必擔心加載兩個單獨的QML文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.