나는 매일 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
네, 맞아요. 실제 클릭에 의해 완료됩니다.명확히 해줘서 고마워. –