qt - QML GridView 隐藏一个单元格

标签 qt gridview qml

可以在 GridView 中隐藏某个单元格吗?我设置了委托(delegate),但我仍然为这个 GridView 元素找到了空位。可以这样做吗?

visible: false
width: 0
height: 0

最佳答案

正如评论中所说,您确实可以使用 QSortFilterProxy 模型,但这是另一种解决方案。您可以使用 DelegateModelDelegateModelGroup

实现纯 QML FilterProxyModel
import QtQuick 2.10
import QtQml.Models 2.3

DelegateModel {

    property var filterAccepts: function(item) {
        return true
    }

    onFilterAcceptsChanged: refilter()

    function refilter() {
        if(hidden.count>0)
            hidden.setGroups(0, hidden.count, "default")
        if(items.count>0)
            items.setGroups(0, items.count, "default")
    }

    function filter() {
        while (unsortedItems.count > 0) {
            var item = unsortedItems.get(0)
            if(filterAccepts(item.model))
                item.groups = "items"
            else
                item.groups = "hidden"
        }
    }

    items.includeByDefault: false
    groups: [
        DelegateModelGroup {
            id: default
            name: "default"
            includeByDefault: true
            onChanged: filter()
        },
        DelegateModelGroup {
            id: hidden
            name: "hidden"
        }
    ]

}

说明:每次将项目添加到模型时,都会将其添加到“默认”组中,这会触发将调用 onChanged 处理程序过滤器()

Filter() 将在默认组中查找项目,并将它们移动到 items 组(这将使它们可见)或 hidden 组,取决于 filterAccepts 函数的结果。

当 filterAccept 发生变化时,SortProxyModel 会将每个项目移动到默认组以触发全局重新过滤。

然后您可以像这样使用您的代理模型:

FilterProxyModel
{
    id: filterProxyModel

    model: <YourBaseModel>
    delegate: <YourDelegate>

    filterAccepts: function(item) {
          // Eg: Only "small" items will be displayed
          return item.size == "small"
    }
}

GridView
{
    anchors.fill: parent
    model: filterProxyModel
    cellHeight: 100
    cellWidth: 100
}

关于qt - QML GridView 隐藏一个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50056880/

相关文章:

c++ - 不匹配 'operator* in ' (1.0e + 0 - ((double)u)) * bezPoints[i][(j + 1)]'

具有多个项目的 ASP.NET Gridview 模板字段

c# - 如何使用 GridView 创建每行 4 列的动态表?

qt - 如何在 QML 中访问和更改组件中的项目

c++ - 如何让 C++ 等待来自 QML 的用户输入

c++ - 如何使用私有(private)Qt C++ API?

qt - 在 Qt 的源代码中显示错误和警告

asp.net - 从asp.net gridview中删除规则属性

javascript - 如何从 json 文件中选择并打印值

python - 如何将动态数据添加到 QML 表