gpt4 book ai didi

qt - 是否可以仅显示 QML ListView 的某些索引?

转载 作者:行者123 更新时间:2023-12-03 16:29:57 24 4
gpt4 key购买 nike

是否可以在 QML ListView 中仅显示某些索引或一系列索引?

我有一个 listmodel 有一堆我正在重用的信息。是否可以有一个列表,例如,仅显示索引 5 到 8?

最佳答案

提出一个纯 QML 方法来解决这个问题会很有趣。这是不是 当然,短路的路径,但它是一个解决方案。

该方法基于 DelegateModel 可在 models QML 模块。它在文档中写道:

The DelegateModel type encapsulates a model and the delegate that will be instantiated for items in the model.

It is usually not necessary to create a DelegateModel. However, it can be useful for manipulating and accessing the modelIndex when a QAbstractItemModel subclass is used as the model. Also, DelegateModel is used together with Package to provide delegates to multiple views, and with DelegateModelGroup to sort and filter delegate items.


DelegateModel确实是一种具有很多功能的强大类型(有关详细信息,请参阅链接文档)。 DelegateModel 的两个关键属性是 groups filterOnGroup .前者基本上是 DelegateModelGroup的列表它定义了要过滤的项目。后者用于应用特定的过滤器,即选择特定的 DelegateModelGroup包含在 groups ,只需将属性设置为所选组的名称即可。

请注意,引用 VisualDataModelDelegateModel是相同的,因为第一个是出于兼容性原因提供的(同样适用于 VisualDataGroup w.r.t. DelegateModelGroup )。

综上所述,可以通过以下方式过滤完整 QML 中的模型:
  • 创建 model作为过滤模型的来源
  • modelVisualDataModel/DelegateModel
  • 定义一个 VisualDataGroup/DelegateModelGroup (或多个) - includeByDefault设置为 false避免自动添加 全部 原始模型中的项目
  • 定义策略以填充组
  • 设置 filterOnGroup到所选组
  • 将 View 模型设置为 VisualDataModel型号

  • 在下一个示例中,为简单起见,我只在 Component.onCompleted 期间填充组一次。事件处理程序。如前所述,应该选择策略,这取决于具体的用例。

    在示例中,只有带有 key 的项目角色等于 0已添加到组 key0这是 ListView 中显示的那个.上述 list 在代码中突出显示。
    import QtQuick 2.2
    import QtQuick.Controls 1.1
    import QtQuick.Window 2.0

    ApplicationWindow {
    title: qsTr("DelegateModel test")
    width: 200
    height: 350
    visible: true

    ListView {
    id: displayListView
    anchors.fill: parent
    spacing: 5
    //
    model: displayDelegateModel // 6
    }

    ListModel { // 1
    id: myModel
    ListElement { vis: "One"; key: 0; }
    ListElement { vis: "two"; key: 1; }
    ListElement { vis: "Three"; key: 0; }
    ListElement { vis: "Four"; key: 0; }
    ListElement { vis: "Five"; key: 1; }
    ListElement { vis: "Six"; key: 1; }
    ListElement { vis: "Seven"; key: 0; }
    }

    VisualDataModel {
    id: displayDelegateModel

    delegate: Rectangle {
    anchors.left: parent.left
    anchors.right: parent.right
    height: 25
    color: "steelblue"

    Text {
    text: vis
    anchors.centerIn: parent
    font.bold: true
    font.pixelSize: 20
    }
    }

    model: myModel // 2

    groups: [
    VisualDataGroup { // 3
    includeByDefault: false // NECESSARY TO AVOID AUTOADDITION
    name: "key0"
    }
    ]

    filterOnGroup: "key0" // 5

    Component.onCompleted: { // 4
    var rowCount = myModel.count;
    items.remove(0,rowCount);
    for( var i = 0;i < rowCount;i++ ) {
    var entry = myModel.get(i);
    if(entry.key == 0) {
    items.insert(entry, "key0");
    }
    }
    }
    }
    }

    关于qt - 是否可以仅显示 QML ListView 的某些索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28941043/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com