QML ListView 模型 setProperty 只工作 1 次
QML ListView Model setProperty Work only 1 time
我有一个充满复选框的 ListView,我想通过单击按钮更改复选框状态这是我的代码。
import QtQuick
import QtQuick.Controls 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
ListView {
id: mylist
width: parent.width
height: 300
anchors {
top: parent.top
left: parent.left
right: parent.right
bottom: change_state.top
bottomMargin: 20
}
model: ListModel {
id: mymodel
ListElement {
mystatus : false
}
ListElement {
mystatus : false
}
ListElement {
mystatus : false
}
}
delegate: Rectangle {
height: 50
width: parent.width
CheckBox {
id: cb
checked: mystatus
anchors.fill: parent
text: "State"
}
}
}
Button {
id: change_state
anchors {
bottom: parent.bottom
}
text: "Change status"
onClicked: {
mymodel.setProperty(1, "mystatus", true)
console.log("PRESSED")
}
}
}
问题是当我在 运行 应用程序后按下按钮时,它会更改状态并选中复选框,但如果我手动取消选中然后再次按下按钮,它有 0 个效果,永远无法再次检查。
QT 6.3
Windows 10
Android、IOS 和桌面版也有同样的问题。
使用 QT 5.15.2 测试过,同样的问题。
当您单击复选框本身时,您就打破了绑定。最初 checked
属性 绑定到 mystatus
。但是,当您手动选中该框时,无论 mystatus
.
的状态如何,您都会强制 checked
为真或假
您可以通过捕获 onClicked 信号并更新 mystatus
来保持绑定完整,而不是强制更改 checked
值。
CheckBox {
id: cb
checked: mystatus
anchors.fill: parent
text: "State"
onClicked: {
mystatus = !mystatus
}
}
更新:
对于取消选中所有框的添加问题,您应该执行与上述相同的操作并更新模型中的 mystatus 值,而不是直接触摸 checked
属性 以便绑定不会坏。
for (var i = 0; i < mymodel.count; ++i) {
mymodel.setProperty(i, "mystatus", false);
}
我有一个充满复选框的 ListView,我想通过单击按钮更改复选框状态这是我的代码。
import QtQuick
import QtQuick.Controls 2.15
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
ListView {
id: mylist
width: parent.width
height: 300
anchors {
top: parent.top
left: parent.left
right: parent.right
bottom: change_state.top
bottomMargin: 20
}
model: ListModel {
id: mymodel
ListElement {
mystatus : false
}
ListElement {
mystatus : false
}
ListElement {
mystatus : false
}
}
delegate: Rectangle {
height: 50
width: parent.width
CheckBox {
id: cb
checked: mystatus
anchors.fill: parent
text: "State"
}
}
}
Button {
id: change_state
anchors {
bottom: parent.bottom
}
text: "Change status"
onClicked: {
mymodel.setProperty(1, "mystatus", true)
console.log("PRESSED")
}
}
}
问题是当我在 运行 应用程序后按下按钮时,它会更改状态并选中复选框,但如果我手动取消选中然后再次按下按钮,它有 0 个效果,永远无法再次检查。
QT 6.3 Windows 10 Android、IOS 和桌面版也有同样的问题。
使用 QT 5.15.2 测试过,同样的问题。
当您单击复选框本身时,您就打破了绑定。最初 checked
属性 绑定到 mystatus
。但是,当您手动选中该框时,无论 mystatus
.
checked
为真或假
您可以通过捕获 onClicked 信号并更新 mystatus
来保持绑定完整,而不是强制更改 checked
值。
CheckBox {
id: cb
checked: mystatus
anchors.fill: parent
text: "State"
onClicked: {
mystatus = !mystatus
}
}
更新:
对于取消选中所有框的添加问题,您应该执行与上述相同的操作并更新模型中的 mystatus 值,而不是直接触摸 checked
属性 以便绑定不会坏。
for (var i = 0; i < mymodel.count; ++i) {
mymodel.setProperty(i, "mystatus", false);
}