Я пытаюсь сделать приложение-конвертер, зависящее от двух ComboBox, используя Controls 2. Например:
// First combobox is input unit:
ComboBox {
id: res_combo1
width: res_comborect1.width
currentIndex: 0
model: ListModel {
id: model1
ListItem { text: qsTr("meter") }
ListItem { text: qsTr("mile") }
ListItem { text: qsTr("km") }
}
}
}
// Second combobox is output unit:
ComboBox {
id: res_combo2
width: res_comborect1.width
currentIndex: 0
model: ListModel {
id: model2
ListItem { text: qsTr("meter") }
ListItem { text: qsTr("mile") }
ListItem { text: qsTr("km") }
}
}
}
Когда текущий индекс выбран из первого поля со списком, второе поле со списком должно удалить текущий индекс. Когда из первого выбирается другой индекс, второй должен восстанавливать предыдущий индекс и динамически удалять текущий индекс. Например, если выбран счетчик, второе поле со списком должно быть {"миля", "км"}. Я знаю только очень длинный путь, который можно выполнить с комбинацией нескольких индексов, но мои данные поля со списком включают 20 элементов, поэтому я не могу применить это способ. Долгий путь:
function visible1(){
if(res_combo1.currentIndex==0){
return true
}
else{
return false
}
}
function visible2(){
if(res_combo1.currentIndex==1){
return true
}
else{
return false
}
}
function visible3(){
if(res_combo1.currentIndex==2){
return true
}
else{
return false
}
}
// if meter is selected from first combobox, second combobox:
RowLayout{
visible: parent.visible1()
ComboBox {
id: outcombo1
currentIndex: 0
model: ListModel {
id: model_o1
ListElement { text: qsTr("mile") }
ListElement { text: qsTr("km") }
}
}
}
// if mile is selected from first combobox:
RowLayout{
visible: parent.visible2()
ComboBox {
id: outcombo1
currentIndex: 0
model: ListModel {
id: model_o2
ListElement { text: qsTr("meter") }
ListElement { text: qsTr("km") }
}
}
}
// if km is selected from first combobox:
RowLayout{
visible: parent.visible3()
ComboBox {
id: outcombo1
currentIndex: 0
model: ListModel {
id: model_o3
ListElement { text: qsTr("meter") }
ListElement { text: qsTr("mile") }
}
}
}
Я думаю, что мы не можем изменять ListItem динамически, поэтому требуется JavaScript с моделью списка JSON путем нахождения текущего индекса через:
function find(model, criteria) {
for(var i = 0; i < model.count; ++i) if (criteria(model.get(i))) return i
return null
}
Но я не мог этого сделать в QML. Есть какое-нибудь решение? Спасибо