如何使用QML StackView的status属性?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用QML StackView的status属性?相关的知识,希望对你有一定的参考价值。

我在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
    {
    }
}
答案

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

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"
    }
}
另一答案

StackView.onStatusChanged:用于组件应该可以帮助你,但要小心 - 你无法定义组件弹出或StackView.status将其他组件推到它上面(至少是大约一年前,我无法检查它是如何正确的现在)。您可以在my old question的小型讨论中找到一些细节

以上是关于如何使用QML StackView的status属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何以递归方式推送到StackView QML?

QML StackView 没有啥可推送的

QML StackView:动态更改replaceEnter/Exit动画

QML:在 StackView 中,水平可滑动的视觉效果会持续存在

如何在QML应用中得到一个Item的所有属性,信号及方法,qmlitem

将属性注入 QML 组件