【问题标题】:QML Felgo - Pass parameter to previuos page when popping navigationStack (or Stackview)QML Felgo - 弹出导航堆栈(或堆栈视图)时将参数传递到上一页
【发布时间】:2022-10-18 08:34:25
【问题描述】:

我有一个 QML (Felgo) 应用程序,我想在弹出时将参数传递给 navigationStack 中堆栈的上一页。当我在 Page3.qml 中调用 pop() 时,我想用从 Page3 传递的值“1”填充 Page2.qml 的“myVar”属性(默认为“0”)。示例代码如下所示。我尝试了该代码,但它不起作用。我究竟做错了什么?谢谢大家。

main.qml

Page1.qml

Page2.qml

Page3.qml

【问题讨论】:

    标签: qt qml felgo


    【解决方案1】:

    一个非常简单的解决方案是将您的变量声明移动到 Main.qml,然后您的所有页面都可以访问它。

    我没有 Felgo,但是,我用 StackView 模仿你的场景:

    import QtQuick 2.15
    import QtQuick.Controls 2.15
    
    Page {
        StackView {
            id: stackView
            anchors.fill: parent
            initialItem: comp1
        }
        ListModel {
            id: listModel
        }
        Component {
            id: comp1
            Page1 {
                onGoForward: stackView.push(comp2)
            }
        }
        Component {
            id: comp2
            Page2 {
                onGoBack: stackView.pop()
                onGoForward: stackView.push(comp3)
            }
        }
        Component {
            id: comp3
            Page3 {
                onGoBack: stackView.pop()
                onNewNumber: number => listModel.append( { number } )
            }
        }
    }
    
    //Page1.qml
    import QtQuick 2.15
    import QtQuick.Controls 2.15
    import QtQuick.Layouts 1.15
    
    Page {
        header: Text { text: "Page1" }
        signal goForward()
        Frame {
            anchors.fill: parent
            ColumnLayout {
                anchors.fill: parent
                ListView {
                    Layout.fillWidth: true
                    Layout.fillHeight: true
                    model: listModel
                    delegate: Frame {
                        width: ListView.view.width
                        Text { text: number }
                    }
                }
                Button {
                    text: qsTr("Go Forward")
                    onClicked: goForward()
                }
            }
        }
    }
    
    //Page2.qml
    import QtQuick 2.15
    import QtQuick.Controls 2.15
    import QtQuick.Layouts 1.15
    
    Page {
        header: Text { text: "Page2" }
        signal goForward()
        signal goBack()
        Frame {
            anchors.fill: parent
            ColumnLayout {
                anchors.fill: parent
                Button {
                    text: qsTr("Go Forward")
                    onClicked: goForward()
                }
                Button {
                    text: qsTr("Go Back")
                    onClicked: goBack()
                }
                Item { Layout.fillHeight: true }
            }
        }
    }
    
    //Page3.qml
    import QtQuick 2.15
    import QtQuick.Controls 2.15
    import QtQuick.Layouts 1.15
    
    Page {
        header: Text { text: "Page3" }
        signal newNumber(var number)
        signal goBack()
        Frame {
            anchors.fill: parent
            ColumnLayout {
                anchors.fill: parent
                Button {
                    text: qsTr("Make New Number")
                    onClicked: {
                       let number = Math.random();
                       resultText.text = number;
                       newNumber(number);
                    }
                }
                Text {
                     id: resultText
                }
                Button {
                    text: qsTr("Go Back")
                    onClicked: goBack()
                }
                Item { Layout.fillHeight: true }
            }
        }
    }
    

    你可以Try it Online!

    编辑:我已更新示例以分别声明 Page1.qml、Page2.qml、Page3.qml,并演示了使用信号将信息反馈给父应用程序以进行导航和共享信息。

    【讨论】:

    • 它工作得很好,但我在实际项目中的页面(不是我发布的小示例代码)非常复杂,我想让它们放在一个单独的文件中,以提高代码的可读性。你能告诉我第3页上的信号的替代解决方案吗?谢谢大家
    • 根据要求,我更新了答案以演示 Page3 上的信号。如果此答案对您有所帮助,请通过投票来表达您的感激之情。
    猜你喜欢
    • 2018-04-12
    • 2020-10-31
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多