繁体   English   中英

QML - 如何记住 combobox 选择

[英]QML - how to remember combobox selection

我无法记住我的 combobox 选择。

这是我的代码:

App {
    id: app
    property var selectedColor: "green"

    NavigationStack {
        Page {
            id: page
            navigationBarHidden: true
            BackgroundImage { source: "../assets/background/default_" + app.selectedColor + ".png" }
            Text { text: qsTr("1st page") }
            Button {
                y: 30
                text: "go to 2nd page"
                onClicked: page.navigationStack.push(secondpage)
            }
        }
    }

    Component {
        id: secondpage
        Page {
          navigationBarHidden: true
          BackgroundImage { source: "../assets/background/default_" + app.selectedColor + ".png" }
          Text { text: qsTr("2nd page") }
          Button {
              y: 30
              text: "go to color selection"
              onClicked: page.navigationStack.push(chooseColorPage)
          }
        }
    }
    
    Component {
        id: chooseColorPage
        Page {
          navigationBarHidden: true

          ComboBox {
              id: colorComboBox
              editable: false
              activeFocusOnPress: true
              model: ListModel {
                  ListElement { text: "green" }
                  ListElement { text: "blue" }
                  ListElement { text: "orange" }
              }

              onCurrentTextChanged: app.selectedColor = currentText

              style: ComboBoxStyle {
                  label: Text {
                      text: control.currentText
                  }
              }
          }
          Button {
              y: 30
              text: "go to 1st page"
              onClicked: page.navigationStack.push(page)
          }
        }
    }
}

当我 select 在“chooseColorPage”中使用颜色时,其他页面中的背景图像会发生应有的变化。 但是一旦我再次打开“chooseColorPage”,label 总是显示“绿色”。 即使我之前选择了例如“蓝色”。 在用户单击 combobox 中的另一种颜色之前,我需要更改什么以使所选颜色不会改变?

任何帮助,将不胜感激!

您的组件是动态创建和销毁的。 因此,当您将 go 返回“chooseColorPage”时,您正在重新创建 ComboBox。 如果没有将 selectedColor 的当前值加载到其中的代码,它将始终默认为 model 中的第一项 - 在本例中为“绿色”。

要修复它,您需要创建一个 function ,当 chooseColorPage 变为活动状态时触发。 可能 Component.onCompleted 附加到 ComboBox 就足够了。 在该 function 中,您需要在 ListModel 中找到“selectedColor”当前值的索引,然后将 colorComboBox.currentIndex 设置为它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM