我有一个QML应用程序,它有两个组合框,一个是父(国家)组合框,另一个是子(城市)组合框。选择国家/地区时,子组合框应同时具有该国家/地区的城市。
我有一个代码,第一个组合框选择了国家,但它没有设置城市组合框的列表模型。重新打开应用程序后设置。
import QtQuick 2.11
import QtQuick.Window 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
import Qt.labs.settings 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
property alias comboBox: comboBox2
Settings{
property alias country : comboBox2.currentIndex
}
Dialog {
id: dialog
title: "Select Country"
implicitWidth: parent.width
implicitHeight: parent.height/2
Column{
ComboBox {
id: comboBox2
x: 199
y: 176
width: 277
height: 48
currentIndex: 0
flat: false
model: ["USA","Russia","Iran"]
}
}
}
ColumnLayout{
anchors.horizontalCenter: parent.horizontalCenter
spacing:20
width: parent.width
Button{
anchors.horizontalCenter: parent.horizontalCenter
id:select_country
text:"select country"
onClicked: dialog.open()
}
RowLayout{
anchors.horizontalCenter: parent.horizontalCenter
spacing:5
width: parent.width
Text {
text:"Select City: "
}
ComboBox {
id: comboBox1
x: 199
y: 176
width: 277
height: 48
model: ListModel {
id: model1
dynamicRoles: true
Component.onCompleted: {
coord_combo()
}
function coord_combo(){
var i = comboBox1.currentIndex
if (comboBox2.currentIndex===0){
comboBox1.model = ["New York","Washington","Houston"]
return comboBox1
}
else if (comboBox2.currentIndex === 1){
comboBox1.model = ["Moscow","Saint Petersburg","Novosibirsk"]
return comboBox1
}
else if (comboBox2.currentIndex === 2){
comboBox1.model = ["Tehran","Tabriz","Shiraz"]
return comboBox1
}
}
}
}
}
}
}
我使用JavaScript函数使用组合框更改了Material QML主题。但是,相同的逻辑不适用于更新其他组合框的列表模型。有什么方法可以使用qml和javascript动态更新子组合框吗?
答案 0 :(得分:0)
您应该在父ComboBox中使用onCurrentIndexChanged
信号,并在触发子项时对其进行更新。像这样的东西
onCurrentIndexChanged:
{
if(currentIndex === 0)
comboBox1.model = ["New York", "Washington", "Houston"]
...
}
您可以走得更远,编写一个函数来获取当前国家/地区的城市。然后,只要父ComboBox的currentIndex
发生更改,您就可以更新子ComboBox的模型。