使用“全部清除”按钮或“全部设置”按钮分配到天数时,它们会更新.但是,一旦点击了任何一个框,它们就不再响应依赖属性日的变化.
为什么是这样?他们在某种程度上变得没有约束力.如果是这样,我应该手动重新绑定它们,如果是这样,为什么?
这是代码,
import QtQuick 2.7import QtQuick.Controls 1.4import QtQuick.Layouts 1.3applicationwindow{ 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 } }}
看起来像这样:
要重现此问题,请先单击“全部设置”和“全部清除”.然后点击一些复选框.然后再次单击“全部设置”和“全部清除”.您会看到您检查的方框不再受影响.
谢谢.
解决方法 当您手动单击该复选框时,checked属性将被重新分配为硬编码的true而不是原始表达式:(days&(1<<< index))!= false.同样,手动取消选中该框会强制将checked属性设置为硬编码的false. 修复是使用 Qt.binding简单地重新绑定已检查的属性.我已经清理了你的JavaScript并修复了你的错误.别客气.Repeater { model: ["Mon","Sun"] CheckBox { function isChecked() { return ((days & (1 << index)) != 0); } text: modelData checked: isChecked() onClicked: { if (checked) { days |= (1<<index); } else { days &= ~(1<<index); } // Now rebind the item's checked property checked = Qt.binding(isChecked); } } }总结
以上是内存溢出为你收集整理的Qt 5.7 QML为什么我的CheckBox属性绑定消失了?全部内容,希望文章能够帮你解决Qt 5.7 QML为什么我的CheckBox属性绑定消失了?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)