使用QQuickView或QQmlApplicationEngine在ApplicationWindow中切换页面

时间:2016-02-18 16:35:41

标签: c++ qt qml qquickview qqmlapplicationengine

我想使用ApplicationWindow作为主文件,并能够使用QML切换到C++的其他QQuickView::setSource(const QUrl & url)个文件。基本上它会这样做:

启动=>加载 main.qml ApplicationWindow)=>点击帮助按钮=> C++加载 help.qml file =>等

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

1 个答案:

答案 0 :(得分:3)

按照您的建议使用QQmlApplicationEngine,并按照您的说法使用main.qml,但使用内容页网址设置C ++的上下文属性,例如: help.qml - 然后绑定到Loader的源属性中的此context属性。

这是从C ++控制QML的常规方法 - 使用属性公开上下文属性或单例对象,从C ++驱动它们,并让QML绑定响应更改。