我有一个全局单例“设置”,它保存应用程序设置。当我尝试运行以下代码时,我得到一个QML CheckBox: Binding loop detected for property "checked"
:
CheckBox {
checked: Settings.someSetting
onCheckedChanged: {
Settings.someSetting = checked;
}
}
发生此错误的原因很明显,但如何在没有绑定循环的情况下正确实现此功能?例如。我想在设置单例中保存复选框的当前选中状态。
我正在使用 Qt 5.4 和 Qml Quick 2。
Regards,
别绑定它。因为复选框并不完全依赖于Setting.someSetting
.
当用户单击该复选框时,CheckBox.checked
是自己改变的。同时,属性绑定不再有效。Settings.someSetting
用户单击复选框后无法修改该复选框。因此,checked: Settings.someSetting
绑定错误。
如果要在组件准备就绪时为复选框分配初始值,请使用Component.onCompleted
分配它:
CheckBox {
id: someSettingCheckBox
Component.onCompleted: checked = Settings.someSetting
onCheckedChanged: Settings.someSetting = checked;
}
如果您正在处理更复杂的场景,Setting.someSetting
在运行时可能会被其他一些事情改变,并且复选框的状态需要同时改变。抓住onSomeSettingChanged
信号并明确更改了复选框。提交值someSettingCheckBox
to Settings
仅当程序/小部件/对话框/xxx完成时。
CheckBox { id: someSettingCheckBox }
//within the Settings, or Connection, or somewhere that can get the signal.
onSomeSettingChanged: someSettingCheckBox.checked = someSetting
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)