QML:如何访问列表元素



我是QML新手,需要一些帮助。

我正在用python代码填充listview。

每个列表元素由一个复选框和相关文本组成。此外,我想使用2个按钮一次选择/取消选择所有复选框。在按钮的onClicked函数中,我可以访问itemName,但是无法访问checked状态。

如何解决这个问题?

Rectangle{

ListModel {
id: sportItems
}
Component{
id:sportRow   
CheckBox{
text: "<font color="white">"+itemName+"</font>"
checked: true
onClicked : {
console.log(itemName+" :::: "+ checked);
}
}
}
ListView{
id: sports
objectName: "sports"
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.topMargin: 10
anchors.leftMargin: 10
model: sportItems
delegate: sportRow
function addItem(entry){
sportItems.append({itemName: entry})
sports.height = sports.height+20
}
}
Row{
anchors.top: sports.bottom
anchors.left: parent.left
anchors.right: parent.right

Button{
anchors.left: parent.left
anchors.leftMargin: 10
text: "All"
onClicked: {
for(var x =0; x< sports.model.get(0).count; x++){
sports.model.get(x).checked = true
}
}
}
Button{
anchors.right: parent.right
anchors.rightMargin: 10
text: "Nothing"
onClicked: {
for(var x =0; x< sports.model.get(0).count; x++){
sports.model.get(x).checked = false
}
}
}
}
}

如果你想在委托之外修改选中状态(即从Check All按钮),那么选中状态应该是你模型的一部分。所以你可以添加一个名为"isChecked"的角色(所以它不会与CheckBox的内置checked属性冲突):

function addItem(entry) {
sportItems.append({ 
itemName: entry, 
isChecked: true    // Keep the checked state
})
sports.height = sports.height+20
}

然后确保委托实际上从模型中读取/写入数据:

Component {
id:sportRow   
CheckBox {
text: "<font color="white">"+itemName+"</font>"
checked: isChecked   // Read from the model
onClicked : {
// Write back to the model
sportItems.setProperty(index, "isChecked", !isChecked)
}
}
}

在Check All按钮中,您只需要设置模型值:

Button {
anchors.left: parent.left
anchors.leftMargin: 10
text: "All"
onClicked: {
for(var i = 0; i < sports.model.count; i++) {
sports.model.setProperty(i, "isChecked", true)
}
}
}

相关内容

  • 没有找到相关文章

最新更新