簡體   English   中英

從C ++代碼創建單獨的QML窗口

[英]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 該類結合了QQmlEngineQQmlComponent ,提供了一種加載單個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類型ApplicationWindowWindow就像上面的例子。 所以在這種情況下,我們的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM