Как использовать свойство статуса QML StackView?

У меня есть 3 компонента внутри QML-типа StackView, и я могу изменять представления, используя push() и pop(). Далее я хотел бы обновить пользовательский интерфейс (компонент) на основе пользовательских конфигураций, когда я нажимаю () или поп () для этого пользовательского интерфейса. Просматривая документацию, я нашел 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
    {
    }
}

person Xavier Geoffrey    schedule 21.12.2017    source источник


Ответы (2)


Я бы сделал это следующим образом:

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"
    }
}
person folibis    schedule 21.12.2017

Использование StackView.onStatusChanged: в компонентах должно помочь вам, но будьте осторожны - вы не можете определить, был ли ваш компонент извлечен или другой компонент был помещен над ним StackView.status (по крайней мере, так было около года назад, я не могу проверить, как это правильно) в настоящее время). Некоторые подробности вы можете найти в небольшом обсуждении в моем старом вопросе

person aknew    schedule 21.12.2017