Qt 5.4/Qml:防止绑定循环

2024-04-29

我有一个全局单例“设置”,它保存应用程序设置。当我尝试运行以下代码时,我得到一个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(使用前将#替换为@)

Qt 5.4/Qml:防止绑定循环 的相关文章

随机推荐