簡體   English   中英

使用QQuickView或QQmlApplicationEngine在ApplicationWindow中的頁面之間切換

[英]Use QQuickView or QQmlApplicationEngine to switch between pages from ApplicationWindow

我想將ApplicationWindow用作主文件,並能夠使用QQuickView::setSource(const QUrl & url)C++切換到其他QML文件。 基本上,它將這樣做:

啟動=>加載main.qmlApplicationWindow )=>單擊幫助按鈕=> C++加載help.qml文件=>等等。

int main(int argc, char *argv[])
{
    QApplication app{argc, argv};
    CustomQQuickView view;

    view.setSource(QUrl{"qrc:/main.qml"});
    view->show();

    return app.exec();
}

main.qml

ApplicationWindow
{
    visible: true
    width: 640
    height: 480

    Loader
    {
        anchors.fill: parent
        id: mainPageLoader
    }

    Button
    {
        text: "Help"
        onClicked: { mainPageLoader.source = "help.qml"}
    }
}

(我想知道這里的Loader是否真的必要)

但是, QQuickView僅支持加載從QQuickItem派生的根對象。 因此,它不適用於ApplicationWindow

我正在考慮使用QQmlApplicationEngine而不是QQuickView但是用法似乎有所不同,該類僅配備QQmlApplicationEngine::load(const QUrl & url)

對我而言,最好的行動方案是什么? 我的main.qml文件中是否真的需要ApplicationWindow

按照您的建議使用QQmlApplicationEngine ,並使用main.qml ,但是使用內容頁面URL從C ++設置上下文屬性,例如help.qml然后在Loader的source屬性中綁定到此上下文屬性。

這是從C ++控制QML的正常方法-公開上下文屬性或具有屬性的單例對象,從C ++驅動它們,並使QML綁定響應更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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