-
Suggestion
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
None
1. The ListModel type in QML does not support property binding, as it cannot bind a property of a UI control to a property of a ListElement.
2. The object returned by the get(index) method is a value copy, not a reference to a ListElement. It is not possible to modify the data of the source ListElement through this returned object, and can only be modified through setProperty(), which is very unreasonable!
3. Another most serious issue is the existence of properties, as you did not provide a so-called hasOwnProperty() method or "===undefined" or "property in obj" like JavaScript to determine whether a certain property exists in the ListElement. For example, in the following case:
ApplicationWindow {
visible: true
width: 640
height: 480
ListModel {
id: globalModel
ListElement { moduleId: "module1"; power: 30; wavelength: 650 }
ListElement { moduleId: "module2"; power: 50; wavelength: 700 }
ListElement { moduleId: "module3"; wavelength: 500 }
ListElement { moduleId: "module4"; power: 80 }
ListElement { moduleId: "module5"; power: 80 }
ListElement { moduleId: "module6" }
ListElement { }
}
ComboBox {
id: comboBox
model: globalModel
currentIndex: 0
textRole: "moduleId"
onCurrentIndexChanged: {
// No matter how I switch, the output is always false
console.log(globalModel.get(currentIndex).power === undefined, globalModel.get(currentIndex).wavelength === undefined)
//When I switched to the last one, it output undefined 0 0, which means the last ListElement's moduleId field is undefined! But the power and wavelength attributes are 0, so logically they should also be undefined!
var currentItem=globalModel.get(currentIndex)
console.log(currentItem.moduleId,currentItem.power,currentItem.wavelength)
}
}
}