Qt QML Models QML Types

DelegateModel

封装了一个Model和Delegate

DelegateModelGroup

封装了visual data items的filtered set

ItemSelectionModel

实例化了一个 QItemSelectionModel to be used in conjunction with a QAbstractItemModel and any view supporting it

ListElement

Defines a data item in a ListModel

ListModel

Defines a free-form list data source

ObjectModel

Defines a set of items to be used as a model

#实例目的: 主要说明如何在一个ListView中使用DelegateModel
#适用场景: 1 当QAbstractItemModel的子类作为model时,使用DelegateModel控制和访问modelIndex非常方便;
#         2 结合Package向多个views提供代理
#         3 结合DelegateModelGroup用来对代理的items进行排序和过滤   #除以上三个场景下一般不创建DelegateModel

Example1:
import QtQuick 2.0
import QtQml.Models 2.2

Rectangle {
    width: 200; height: 100

    DelegateModel {
        id: visualModel
        model: ListModel {
            ListElement { name: "Apple" }
            ListElement { name: "Orange" }
        }
        delegate: Rectangle {
            anchors.centerIn: visualModel
            height: 25
            width: 100
            Text { text: "Name: " + name}
        }
    }

    ListView {
        anchors.fill: parent
        model: visualModel
    }
}

 

 

This property holds a delegate model's group definitions.

Groups define a sub-set of the items in a delegate model and can be used to filter a model.

For every group defined in a DelegateModel two attached properties are added to each delegate item. The first of the form DelegateModel.inGroupNameholds whether the item belongs to the group and the second DelegateModel.groupNameIndex holds the index of the item in that group.

The following example illustrates using groups to select items in a model.

  import QtQuick 2.0
  import QtQml.Models 2.2

  Rectangle {
      width: 200; height: 100

      DelegateModel {
          id: visualModel
          model: ListModel {
              ListElement { name: "Apple" }
              ListElement { name: "Orange" }
          }

          groups: [
              DelegateModelGroup { name: "selected" }
          ]

          delegate: Rectangle {
              id: item
              height: 25
              width: 200
              Text {
                  text: {
                      var text = "Name: " + name
                      if (item.DelegateModel.inSelected)
                          text += " (" + item.DelegateModel.selectedIndex + ")"
                      return text;
                  }
              }
              MouseArea {
                  anchors.fill: parent
                  onClicked: item.DelegateModel.inSelected = !item.DelegateModel.inSelected
              }
          }
      }

      ListView {
          anchors.fill: parent
          model: visualModel
      }
  }

  



posted @ 2019-03-14 00:37  无边身尊者  阅读(832)  评论(0)    收藏  举报