私はCheckBox
の単純なリストを1週間に1つずつ持っています。それらは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' **に割り当てられても**チェックされたプロパティが壊れません。実際のユーザーがチェックボックスをクリックすると、そのチェックボックスが壊れます。それをこのように考えてください。 'onClicked'が呼び出される直前に、Qtは' checked = true; 'を呼び出して、あなたの条件をオーバーライドします。 – selbie
はい、もちろんそうです。それは実際のクリックによって行われます。明確化のためにありがとう。 –