我有一個充滿復選框的 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 和相同的問題進行測驗。
uj5u.com熱心網友回復:
當您單擊復選框本身時,您會破壞系結。最初,該checked
屬性系結到mystatus
. 但是,當您手動選中該框時checked
,無論mystatus
.
您可以通過捕獲 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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/452520.html