gpt4 book ai didi

qt - "Bind"两个 QML CheckBox 在一起,确保它们的状态始终相同

转载 作者:行者123 更新时间:2023-12-01 01:54:01 25 4
gpt4 key购买 nike

我想在 GUI 的不同页面上创建两个复选框,以便它们在语义上是“相同”的复选框——相同的标签,相同的效果。 (将它们放在两个页面上只是为了方便用户。)

这需要将两个 CheckBox QML 元素“绑定(bind)”在一起,以便一个元素的状态始终由另一个元素反射(reflect),反之亦然。

这是equivalent to what's being asked here ,除了我使用 QML/JS 而不是 JS/JQuery。

我认为将每个复选框的 checked 状态绑定(bind)到某个全局持久属性的简单实现会起作用:

// 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 绑定(bind)。这是intended behavior, not a bug .

那么如何确保两个复选框始终共享相同的“选中”状态?

编辑:根据下面的评论,上述实现无需修改即可在随 Qt 5.7 一起发布的 Qt Quick Controls 2 中运行,因此此问题仅适用于 Qt 的早期版本(包括5.6,这是一个“长期支持”版本)。

最佳答案

单击复选框时,其 checked 属性将发生更改,并且原始 checked: MySharedState.my_feature_on 绑定(bind)将被删除。您需要create a property binding from Javascript恢复原始绑定(bind),如 J-P Nurmi 在您链接的错误报告中所解释的那样。

为此,您必须使用 Qt.binding() .

CheckBox {
checked: MySharedState.my_feature_on
onClicked: { // the checked binding is removed since checked has been changed externally to the binding
MySharedState.my_feature_on = checked
checked = Qt.binding(function() {return MySharedState.my_feature_on}); //we restore the checked binding
}
}

关于qt - "Bind"两个 QML CheckBox 在一起,确保它们的状态始终相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37840642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com