Qt-Qml:将复选框绑定到 QAbstractListModel

Posted

技术标签:

【中文标题】Qt-Qml:将复选框绑定到 QAbstractListModel【英文标题】:Qt-Qml: Binding checkbox to QAbstractListModel 【发布时间】:2015-03-20 08:53:44 【问题描述】:

我在开发程序时遇到问题。我有一个QAbstractListModel,其中包含一个boole 属性,我希望能够将该值传递给包含CheckBox 的QML 文件。

我发现this question on *** 涵盖了同样的问题。我面临着完全相同的问题,但问题和答案涵盖了通过Q_PROPERTY 将属性发送到qml 而我使用QAbstractListmodel 的情况。我已经覆盖了setData()data()flags() 方法并且一切正常,但是我有一个按钮可以选中/取消选中我所有的CheckBoxes,如果用户直接选中其中一个,则该按钮将不可编辑通过我的选中/取消选中按钮。

所以基本上,我想知道如何使用QAbstractListModel 而不是Q_PROPERTY 设置双向绑定。

谢谢。

【问题讨论】:

【参考方案1】:

抱歉打扰了。我用我的小脑袋花了 5 多分钟才找到答案。

我只需要使用dataChanged 信号就可以将我的模型正确连接到视图。

 CheckBox 
        id: myCheck
        onClicked: user.status = checked
        Component.onCompleted: checked = user.status
        Connections 
            target: user
            onDataChanged: myCheck.checked = user.status
        
    

不知道我们可以将现有信号直接传递给 QML,只需将 on 放在信号名称的前面。

【讨论】:

Any 属性,属性作为对应的更改处理程序,即如果您定义属性myProp,则可以使用第一个大写字母声明处理程序onMyProp。信号也是如此。如果答案解决了您的问题,请接受这个作为正确答案。 要添加到@BaCaRoZzo 的评论中,任何自定义属性都必须以小写字母开头。 @BaCaRoZzo 这是onMyPropChanged 大声笑......显然是这样。刚刚丢了。感谢指出。 :) 所以信号/属性是name(第一个小写字母),对应的处理程序是onNameChanged(属性/信号大写的第一个字母)。

以上是关于Qt-Qml:将复选框绑定到 QAbstractListModel的主要内容,如果未能解决你的问题,请参考以下文章

WPF 将枚举列表(或类似列表)绑定到复选框列表

将数据表绑定到复选框列表

将多个子复选框绑定到一个父级

将更改事件绑定到每个 DataTables 行中的复选框

如何将对象列表绑定到百里香中的复选框?

将静态文本框绑定到复选框