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

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

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

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

谢谢。

【问题讨论】:

    标签: c++ qt data-binding qml qabstractlistmodel


    【解决方案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(属性/信号大写的第一个字母)。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2021-12-15
    • 2018-07-24
    • 2013-04-06
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多