sudo_woodo
sudo_woodo

Reputation: 63

Access QML Stackview from a file different than the one that contains it

I'm making a QML app. I've defined a main.qml where i've added a StackView. I've loaded a page on this "main" stackview but from the main.qml. Now I need to push something to this stackview but from another file (to be more specific, from one of the pages I've previously pushed on this stackview).

This is what I've made.

main.qml

ApplicationWindow {
    id: window
    visible: true
    width: 320
    height: 568
    title: qsTr("Stack")

    header: ToolBar {
        contentHeight: toolButton.implicitHeight

        ToolButton {
            id: toolButton
            text: stackView.depth > 1 ? "\u25C0" : ""
            font.pixelSize: Qt.application.font.pixelSize * 1.6
            onClicked: {
                if ( stackView.depth > 1 ) {
                    stackView.pop( )
                } else {
                    ...
                }


            }
        }

        Label {
            text: stackView.currentItem.title
            anchors.centerIn: parent
        }
    }


    StackView {
        id: stackView
        initialItem: "ListaInventarios.qml"
        anchors.fill: parent
    }


}

ListaInventarios.qml

Page {
    width: parent.width
    height: parent.height
    id: listaInventarios
    title: "Inventarios"


    ListView {
        id: lvInventarios
        anchors.fill: parent
        model: ListModel { ... }
        delegate: Component {
            Item {
                width: parent.width
                height: 40
                Column {
                    Text { text: nombreInventario; font.bold: true }
                    Text { text: fuenteDatos }
                }
                MouseArea {
                    anchors.fill: parent
                    onClicked: { lvInventarios.currentIndex = index }
                    onDoubleClicked: {

                    // HERE I NEED TO PUSH A NEW PAGE ON "stackView" (from main.qml)

                    }
                }
            }
        }

        highlight: Rectangle {
            color: "lightblue"
            radius: 5
        }

        focus: true

    }


    footer: ToolBar {
        id: barraInferior
        contentHeight: toolButton.implicitHeight
        Row {
            anchors {
                horizontalCenter: parent.horizontalCenter
                verticalCenter: parent.verticalCenter

            }

            ToolButton {
                text: "Nuevo"
                width: window.width / 2
                onClicked: {
                   ...
                }
            }

            ToolButton {
                text: "Borrar"
                width: window.width / 2
                onClicked: {
                    ...
                }

            }

        }
    }

}

Upvotes: 1

Views: 564

Answers (1)

Mitch
Mitch

Reputation: 24416

Use the attached StackView API:

onDoubleClicked: {
    listaInventarios.StackView.view.push("Foo.qml")
}

Note that you need to prefix the call with the item that's managed by the StackView: listaInventarios.

Upvotes: 1

Related Questions