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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以递归方式推送到StackView QML?相关的知识,希望对你有一定的参考价值。

每次点击一个按钮,我都会有一个StackView和一个项目。它只在我第一次按下按钮时起作用,我可以理解父子关系存在问题。但是如何解决呢?

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 640
    height: 480

    StackView{
        id: stackView
        anchors.fill: parent

        initialItem: Item {
            width: parent.width
            height: parent.height
            FirstLevel {
                myModel: 5
                onButtonClicked: {
                    stackView.push("qrc:/FirstLevel.qml", {myModel: 5})
                }
            }
        }
    }
}

FirstLevel.qml

import QtQuick 2.0
import QtQuick.Controls 1.4

Column {
    property var myModel

    signal buttonClicked()

    Repeater {
        model: myModel

        Button {
            text: model.index
            onClicked: {
                buttonClicked()
            }
        }
    }
}

更新我

每次我点击FirstLevel.qml项目中的按钮时,我想将FirstLevel.qml项目推入stackview。

答案

你必须在FirstLevel.qml中进行推送:

main.qml

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 640
    height: 480

    StackView{
        id: stackView
        anchors.fill: parent

        initialItem: Item {
            width: parent.width
            height: parent.height
            FirstLevel {
                myModel: 5
            }
        }
    }
}

FirstLevel.qml

import QtQuick 2.0
import QtQuick.Controls 1.4

Column {
    property var myModel
    Repeater {
        model: myModel
        Button {
            text: model.index
            onClicked: {
                stackView.push("qrc:/FirstLevel.qml", {myModel: myModel})
            }
        }
    }
}

以上是关于如何以递归方式推送到StackView QML?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值推送到 QML 属性变量二维数组 - 动态?

如何检查视图控制器是不是以模态方式呈现或推送到导航堆栈上?

如何使用 QML StackView?

QtQuick 动画冻结在列表和打开的串口上

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

将 MFMailComposeViewController 推送到导航堆栈上?未以模态方式呈现