我刚开始学习qml,并有一个关于如何从另一个组件获取comboBox.currentText的问题。
代码示例:
App {
id: app
width: px(250); height: px(250)
NavigationStack {
Page {
id: page
navigationBarHidden: true
AppText { text: "startpage" }
SimpleButton{
x: 220; y: 0; onClicked: page.navigationStack.push(settingsPage)
}
AppText {
x: 0; y: 50; text: "text " + comboBox1.currentText
}
}
}
Component {
id: settingsPage
Page {
navigationBarHidden: true
AppText { text: qsTr("settings page") }
SimpleButton{
x: 220; y: 0; onClicked: page.navigationStack.push(lastPage)
}
ComboBox {
id: comboBox1
currentIndex: 0
x: 10; y: 40
style: ComboBoxStyle {
label: Text {
text: control.currentText
}
}
model: ListModel {
ListElement { text: "green" }
ListElement { text: "dark-green" }
ListElement { text: "blue" }
}
}
AppText {
x: 0; y: 90; text: "text " + comboBox1.currentText
}
}
}
Component {
id: lastPage
Page {
navigationBarHidden: true
AppText { text: qsTr("last page") }
SimpleButton{
x: 220; y: 0; onClicked: page.navigationStack.push(page)
}
AppText {
x: px(50); y: px(90); text: "text " + comboBox1.currentText
}
}
}
}
->我需要从设置页面的组合框中获取选定的列表元素,并在 id 为 lastPage 的组件中使用它
任何帮助将不胜感激
实际上我不知道您在这里使用的元素是什么(应用程序,导航堆栈等),但通常结构可以如下所示:
Window {
visible: true
width: 400
height: 300
id: root
property color someColor: "green"
Row {
id: element1
anchors.centerIn: parent
Rectangle {
width: 100
height: 100
color: root.someColor
}
Rectangle {
id: element2
width: 100
height: 100
color: "yellow"
MouseArea {
anchors.fill: parent
onClicked: {
root.someColor = "blue"
}
}
}
}
}
element1
取决于其父项/顶级项中的某些属性,这些属性始终在范围内。这种结构在QML中称为property bindings
,可以通过多种方式完成(例如使用绑定,适用于动态元素)。element2
还可以访问/更改属性,因此从element2
更改属性会立即影响element1
。当您想从root
访问element1
并且element1
不在范围内,或者不存在或在这种情况下会使应用程序崩溃的任何其他内容时,这也解决了问题。