Mam prostą listę CheckBox
es, jedną na każdy dzień tygodnia. Zależą one od wartości days
, liczby całkowitej za pomocą maski, 1 bit za każdy CheckBox
.Qt 5.7 QML Dlaczego moje powiązania właściwości CheckBox znikają?
Przypisanie do days
zarówno za pomocą przycisku "wyczyść wszystko" lub przycisku "ustaw wszystko" działa i są one aktualizowane. Jednak po kliknięciu dowolnego z pól nie reagują one już na zmiany w zależnej właściwości days
.
Dlaczego tak jest? Czy w jakiś sposób stają się niezwiązane? Jeśli tak, czy powinienem je ręcznie ponownie powiązać, a jeśli tak, dlaczego?
Oto kod,
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
}
}
}
który wygląda następująco:
odtworzyć problem, najpierw kliknij na "set all" i "Clear All". następnie kliknij pola wyboru. Następnie ponownie kliknij "set all" i "clear all". Zobaczysz, że pola, które zaznaczyłeś, nie są już dotknięte.
dzięki.
Dziękuję bardzo! Twoja odpowiedź działa jak smakołyk. Nie zdawałem sobie sprawy, że przypisanie do 'dni' spowodowało, że zależność" sprawdzonego "została przerwana. Dziękuję za wyjaśnienie. –
Przypisanie do 'dni' ** nie oznacza, że właściwość' checked' zostanie złamana. Faktyczny użytkownik klika na pole wyboru powoduje, że jest on uszkodzony. Pomyśl o tym w ten sposób. Tuż przed wywołaniem 'onClicked', Qt wywołuje' checked = true; 'Tym samym przesłonię twoje warunkowe. – selbie
Oczywiście, masz rację. odbywa się poprzez rzeczywiste kliknięcie.dzięki za wytłumaczenie. –