ListView 模型函数

Posted

技术标签:

【中文标题】ListView 模型函数【英文标题】:ListView model function 【发布时间】:2016-04-14 14:07:14 【问题描述】:

我刚刚开始使用 Qt,并尝试制作操作 ListView 模型元素的函数。

我在“myButton.qml”中有自定义按钮,其状态为“正常”、“按下”、“选定”等。

ListView 在“main.qml”中。结构是这样的:

ListView
    //...

    model: nameModel

    delegate: myButton 
        //...
    


所以这是我的目标:这个按钮列表应该像一组单选按钮一样 - 只有一个可以具有选择状态,并且选择状态是当您按下按钮时。我认为我应该有点击处理程序和一个调用按钮点击的函数。函数应检查按钮列表,如果在函数之前选择了一个按钮,则将其状态更改为“正常”。

所以我不知道如何编写这个函数以及我应该把它放在哪里。我阅读了 Qt 文档,但仍然不知道。

【问题讨论】:

【参考方案1】:

解决此问题的一种可能的简单方法是利用ExclusiveGroup。正如documentation 中所讨论的,对这种类型的支持可以添加到 any 类型:

可以为对象或控件添加对 ExclusiveGroup 的支持。它应该有一个 checked 属性,以及一个 checkedChangedtoggled()toggled(bool) 信号.在设置 ExclusiveGroup 类型属性时,还需要与 ExclusiveGroup::bindCheckable() 绑定

您可以在ListView 级别定义ExclusiveGroup,并在ListView 委托中实现所需的逻辑。通过将委托ExclusiveGroup 属性绑定到ListViewExclusiveGroup,您应该可以实现您想要的,而无需抓取模型的函数。

最后一个演示用法的玩具示例:

import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4


Window 
    id: root
    visible: true
    width: 200
    height: 500

    ListView 
        anchors.fill: parent
        model: 10
        spacing: 20
        ExclusiveGroup  id: ex    // the group for all the delegate

        delegate: Rectangle 
            id: delegate
            width: ListView.view.width
            height: 30
            color: checked ? "yellow" : "steelblue"

            // code to have exclusive behaviour
            property bool checked: false
            property ExclusiveGroup exclusiveGroup: ex

            onExclusiveGroupChanged: 
                if (exclusiveGroup)
                    exclusiveGroup.bindCheckable(delegate)
            

            // mouse area to trigger the property change
            MouseArea 
                anchors.fill: parent
                onClicked: checked = true
            
        
    

【讨论】:

感谢您提供了这么好的示例!看起来很容易理解。 我很高兴它有帮助。快乐编码! :)

以上是关于ListView 模型函数的主要内容,如果未能解决你的问题,请参考以下文章

ListView.model 不能正常工作

使用具有不同模型和 DataTemplates 的分组 ListView

从视图模型绑定到 ListView 项目的点击属性

从 django 中的模型字段在 ListView 中创建列表

如何通知 ListView DataModel 已更改

Qt - QVector 和模型视图 - 从 listView 获取自定义类的最佳方法是啥?