我有一個簡單的列表CheckBox
es,一個星期中的每一天。它們取決於days
的值,使用掩碼的整數,每個CheckBox
的值爲1位。Qt 5.7 QML爲什麼我的CheckBox屬性綁定消失?
指定days
兩個都帶有「全部清除」按鈕或「全部設置」按鈕有效並且它們更新。但是,一旦任何方框被點擊,它們不再響應相關屬性days
中的更改。
這是爲什麼?他們是不知何故變得沒有約束力的。如果是這樣,我應該手動重新綁定它們,如果是的話,爲什麼?
下面的代碼,
import QtQuick 2.7
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3
ApplicationWindow
{
visible: true
width: 800
height: 400
property int days: 0
ColumnLayout
{
Repeater
{
model: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
CheckBox
{
text: modelData
checked: (days & (1<<index)) != false
onClicked:
{
if (checked) days |= (1<<index);
else days &= ~(1<<index);
}
}
}
Button
{
text: "clear all"
onClicked: days = 0
}
Button
{
text: "set all"
onClicked: days = 127
}
}
}
,看起來像這樣:
要重現該問題,首先點擊 「設置的所有」 和 「全部清除」。然後點擊一些複選框。然後再次點擊「全部設置」和「全部清除」。您會看到您檢查的框不再受影響。
謝謝。
非常感謝!你的答案是一種享受。我沒有意識到分配給'days'會導致'checked'的依賴被打破。感謝您的解釋。 –
分配給'days' **不會導致'checked'屬性被破壞。實際用戶點擊複選框會導致它被打破。像這樣想。在'onClicked'被調用之前,Qt調用'checked = true;'從而覆蓋你的條件。 – selbie
是的,當然你是對的。它由實際的點擊完成。謝謝澄清。 –