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()
方法并且一切正常,但是我有一个按钮可以选中/取消选中我所有的CheckBox
es,如果用户直接选中其中一个,则该按钮将不可编辑通过我的选中/取消选中按钮。
所以基本上,我想知道如何使用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的主要内容,如果未能解决你的问题,请参考以下文章