【发布时间】:2016-06-15 16:12:07
【问题描述】:
我想在 GUI 的不同页面上创建两个复选框,以便它们在语义上是“相同”的复选框——相同的标签,相同的效果。 (将它们放在两个页面上只是为了方便用户。)
这需要将两个CheckBox QML 元素“绑定”在一起,这样一个元素的状态总是被另一个元素反映,反之亦然。
这是equivalent to what's being asked here,但我使用的是 QML/JS 而不是 JS/JQuery。
我认为将每个复选框的 checked 状态绑定到某个全局持久属性的简单实现会起作用:
// Global shared state object
pragma Singleton
MySharedState {
my_feature_on: false
}
然后,在两个单独的页面上,完全相同的CheckBox 实例化:
// Checkbox implementation (on both pages
CheckBox {
checked: MySharedState.my_feature_on
onClicked: MySharedState.my_feature_on = checked
}
但是,这不起作用,因为当单击复选框时,它会破坏初始的 checked 绑定。这是intended behavior, not a bug。
那么如何确保两个复选框始终共享相同的“选中”状态?
编辑:根据下面的评论,上述实现将在 Qt Quick Controls 2(随 Qt 5.7 一起发布)中无需修改即可工作,因此此问题仅适用于 Qt 的早期版本(包括5.6,这是一个“长期支持”版本)。
【问题讨论】:
-
对于它的价值,在 Qt 5.7 中发布的 Qt Quick Controls 2 中,可以直接或通过此类共享状态对象将两个 CheckBox 相互绑定。
-
@J-PNurmi 太棒了。我已经编辑了问题以记录下来。谢谢。
标签: qt checkbox qml qtquick2 qtquickcontrols