如何使用QML StackView的状态属性?

时间:2017-12-21 14:19:47

标签: qt qml stackview

我在StackView QML类型中有3个组件,我可以使用push()pop()更改视图。再往下,我想在将push()或pop()推送到该UI时,根据用户配置更新UI(组件)。通过文档,我发现Stack.status在这种情况下很有趣,但不知道如何使用它。

任何人都能举一些关于它的例子吗?

以下是我将屏幕加载到堆栈视图并导航的代码:

StackView {
    id: stackView
    visible: false
    //        rotation: 180
    anchors.fill: parent

    initialItem: componentHome

    Component.onCompleted:
    {

    }

}
Component
{
    id: componentHome
    Home
    {
        //This is how I traverse the screens
        onMenuClicked:
        {
            console.log("opening "+name+" screen")
            if(name === "settings")
            {
                //Here, for eg. how to update UI in Settings screen before pushing it?
                stackView.push(componentSettings)
            }
        }
    }
}
Component
{
    id: componentSettings
    Settings
    {
    }
}
Component
{
    id: componentPlay
    Play
    {
    }
}

2 个答案:

答案 0 :(得分:0)

我会用以下方式做到这一点:

import QtQuick.Controls 2.1

StackView {
    id: stack
    anchors.fill: parent
    initialItem: page1
}

Button {
    text: "add page"
    onClicked: {
        var page = stack.push(page2, {color: "red"});
        //page.color = "red"; // - that also should work
    }
}

Component {
    id: page1
    Rectangle {
        color: "black"
    }
}

Component {
    id: page2
    Rectangle {
        color: "black"
    }
}

答案 1 :(得分:0)

在组件中使用StackView.onStatusChanged:可以帮助你,但要小心 - 你无法定义组件弹出或StackView.status将其他组件推到它上面(至少大约一年前,我可以现在检查它是怎么回事。您可以在my old question

中的小型讨论中找到一些细节