Ich habe eine einfache Liste von CheckBox
es, eins für jeden Tag der Woche. Sie hängen vom Wert days
ab, einer Ganzzahl, die eine Maske verwendet, und 1 Bit für jede CheckBox
.Qt 5.7 QML Warum verschwinden meine CheckBox-Eigenschaftsbindungen?
Zuordnung zu days
beide mit der Schaltfläche "Alles löschen" oder die Schaltfläche "Alle einstellen" funktioniert und sie aktualisieren. Sobald jedoch eines der Felder angeklickt wurde, reagieren sie nicht mehr auf Änderungen in der abhängigen Eigenschaft days
.
Warum ist das? Werden sie irgendwie ungebunden? Wenn ja, sollte ich sie manuell neu binden, und wenn ja, warum?
Hier ist der Code,
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
}
}
}
, die wie folgt aussieht:
Um das Problem, klicken Sie zuerst auf "setzen alle" und "Alle löschen" zu reproduzieren. Klicken Sie dann auf einige Kontrollkästchen. Klicken Sie dann erneut auf "Alle einstellen" und "Alle löschen". Sie werden feststellen, dass die aktivierten Kontrollkästchen nicht mehr betroffen sind.
danke.
Vielen Dank! Ihre Antwort funktioniert gut. Ich hatte nicht bemerkt, dass das Zuweisen von "Tagen" die Abhängigkeit von "überprüft" verursachte. Danke für die Erklärung. –
Das Zuweisen von "Tagen" ** führt nicht dazu, dass die Eigenschaft "checked" beschädigt wird. Der tatsächliche Benutzer klickt auf das Kontrollkästchen, damit es unterbrochen wird. Denken Sie so darüber nach. Unmittelbar bevor 'onClicked' aufgerufen wird, ruft Qt' checked = true; 'auf, wodurch Ihre Bedingung überschrieben wird. – selbie
Ja, natürlich hast du recht. es wird durch den tatsächlichen Klick erledigt.Danke fürs klarstellen. –