sil*_*gan 4 qt qml qt-quick qtquick2
下面我创建一个ListView,其中包含一个CheckBox,其checked
属性绑定到模型的checked
角色.单击委托时,我想通过更改模型的checked
属性来切换CheckBox状态.但之间的结合checkBox.checked
和model.checked
工程仅在第一次用户点击该委托.之后,checkBox
始终检查,与model.checked
值无关.结果是用户无法取消选中该复选框,我不希望这样.
import QtQuick 2.2
import QtQuick.Controls 1.1
ListView { id: listView
height: 100
width: 100
model: ListModel {
ListElement { checked: false }
ListElement { checked: false }
}
delegate: Rectangle {
width: listView.width
implicitHeight: checkBox.implicitHeight * 1.3
CheckBox { id: checkBox
anchors.fill: parent
text: index + 1
checked: model.checked
}
MouseArea { id: mouseArea
anchors.fill: parent
onClicked: {
var item = listView.model.get(index);
console.log('old model.checked:', model.checked);
item.checked = !item.checked;
console.log('new model.checked:', model.checked);
console.log('checkBox.checked:', checkBox.checked);
console.log('something went wrong:', model.checked !== checkBox.checked);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码中的问题在哪里?如何使委托像普通的CheckBox一样工作?
这是一个报告的错误:https://bugreports.qt.io/browse/QTBUG-31627.
使用该错误报告下的注释中描述的walkaround使我的代码中的复选框正常工作.我删除了该checked: model.checked
行并将以下代码添加到Rectangle委托:
Binding {
target: checkBox
property: 'checked'
value: model.checked
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5169 次 |
最近记录: |