DelegateModel QML Type

モデルとデリゲートをカプセル化します。詳細...

Import Statement: import QtQml.Models

プロパティ

Attached プロパティ

メソッド

詳細な説明

DelegateModel 型は、モデルと、モデル内のアイテムに対してインスタンス化されるデリゲートをカプセル化します。

通常、DelegateModel を作成する必要はない。しかし、QAbstractItemModel のサブクラスがモデルとして使用されている場合、modelIndex を操作したりアクセスしたりするのに便利です。また、DelegateModel は、Package と共に、複数のビューにデリゲートを提供するために使用され、DelegateModelGroup と共に、デリゲートアイテムのソートやフィルタリングのために使用されます。

DelegateModel は一次元モデルのみをサポートしており、テーブルモデルを DelegateModel に割り当て、TableView に割り当てると、一つの列のみが表示されます。

以下の例では、ListView で DelegateModel を使用しています。

import QtQuick
import QtQml.Models

Rectangle {
    width: 200; height: 100

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

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

プロパティの記述

count : int


delegate : Component

デリゲートは、ビューによってインスタンス化された各項目を定義するテンプレートを提供します。インデックスは、アクセス可能なindex プロパティとして公開されます。データモデルの種類に応じて、モデルのプロパティも利用可能です。


filterOnGroup : string

このプロパティは、デリゲートモデルをフィルタリングするために使用されるグループの名前を保持します。

このグループに属する項目のみがビューに表示されます。

デフォルトでは、これはitems グループです。


このプロパティは、デリゲートモデルのグループ定義を保持します。

グループは、デリゲートモデル内のアイテムのサブセットを定義し、モデルをフィルタリングするために使用することができます。

DelegateModel で定義されたすべてのグループに対して、2つの付属の擬似プロパティが各デリゲート項目に追加されます。最初のDelegateModel.inGroupNameは、そのアイテムがグループに属しているかどうかを保持し、2 番目のDelegateModel.groupNameIndexは、そのグループ内のアイテムのインデックスを保持します。

以下の例では、モデル内の項目を選択するためにグループを使用しています。

import QtQuick
import QtQml.Models

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
    }
}

警告 通常のアタッチド・プロパティとは対照的に、これらのプロパティは宣言的な方法で設定することはできません。以下のようにするとエラーになります:

delegate: Rectangle {
    DelegateModel.inSelected: true
}

このプロパティは、すべての新しいアイテムが追加されるデフォルトグループを保持します。


model : model

このプロパティは、DelegateModel のデータを提供するモデルを保持します。

モデルは、ビューの項目を作成するために使用されるデータのセットを提供します。大きなデータセットや動的なデータセットの場合、モデルは通常 C++ モデル・オブジェクトによって提供されます。C++モデル・オブジェクトは、QAbstractItemModel のサブクラスか、単純なリストでなければなりません。

モデルは、例えばListModel を使ってQMLで直接作成することもできます。

データ・モデル」も参照してください


parts : object

parts プロパティは、指定されたパートからデリゲートを作成するDelegateModel を選択します。これはPackage タイプと組み合わせて使用します。

例えば、以下のコードは、Package からlistという名前のデリゲートを作成するモデルを選択します:

DelegateModel {
    id: visualModel
    delegate: Package {
        Item { Package.name: "list" }
    }
    model: myModel
}

ListView {
    width: 200; height:200
    model: visualModel.parts.list
}

Packageも参照して ください。


persistedItems : DelegateModelGroup

このプロパティは、デリゲートモデルの永続化アイテムグループを保持します。

このグループのアイテムは、ビューによって解放されても破棄されません。

DelegateModelinPersistedItems プロパティを false に設定することで、アイテムを persistedItems グループから削除することができます。その時、アイテムがビューによって参照されていなければ、破棄されます。このグループに項目を追加しても、新しいインスタンスは作成されません。

QtQml.Models::DelegateModelGroup::create() 関数によって返されたアイテムは、自動的にこのグループに追加されます。


rootIndex : QModelIndex

QAbstractItemModel rootIndex 、 の任意のノードの子ノードをこのモデルから提供することができます。QAbstractItemModel

このプロパティは、QAbstractItemModel 型のモデルのうち、階層的なモデル(例えば、ツリーモデル)にのみ影響します。

例えば、簡単な対話型ファイルシステム・ブラウザを示します。ディレクトリ名がクリックされると、ビューのrootIndex がクリックされたディレクトリのQModelIndex ノードに設定され、新しいディレクトリの内容が表示されるようにビューが更新されます。

main.cpp:

int main(int argc, char ** argv)
{
    QApplication app(argc, argv);

    QQuickView view;

    QFileSystemModel model;
    view.rootContext()->setContextProperty("fileSystemModel", &model);

    view.setSource(QUrl::fromLocalFile("view.qml"));
    view.show();

    return app.exec();
}

view.qml:

import QtQuick
import QtQml.Models

ListView {
    id: view
    width: 300
    height: 400

    model: DelegateModel {
        model: fileSystemModel

        delegate: Rectangle {
            width: 200; height: 25
            Text { text: filePath }

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    if (model.hasModelChildren)
                        view.model.rootIndex = view.model.modelIndex(index)
                }
            }
        }
    }
}

modelQAbstractItemModel のサブクラスである場合、デリゲートは、デリゲートのモデルアイテムに子ノードがあるかどうかを示すhasModelChildren プロパティ(オプションでmodel.prefix で修飾)を参照することもできます。

modelIndex() およびparentModelIndex()も参照してください


Attached Property ドキュメント

DelegateModel.groups : stringlist

この Attached プロパティは、そのアイテムが属する DelegateModelGroups の名前を保持します。

このプロパティは、デリゲートの各インスタンスにアタッチされます。


DelegateModel.inItems : bool

この Attached プロパティは、アイテムがデフォルトのitems DelegateModelGroup に属しているかどうかを保持します。

このプロパティを変更すると、アイテム グループにアイテムが追加または削除されます。

このプロパティは、デリゲートの各インスタンスにアタッチされます。


DelegateModel.inPersistedItems : bool

このアタッチされたプロパティは、アイテムがpersistedItems DelegateModelGroup に属しているかどうかを保持します。

このプロパティを変更すると、アイテム グループからアイテムが追加または削除されます。persistedItems グループからアイテムを削除すると、モデルによって参照されていない場合、現在のインスタンスが破壊されるので、注意して変更してください。

このプロパティはデリゲートの各インスタンスにアタッチされます。


DelegateModel.isUnresolved : bool

このアタッチされたプロパティは、ビジュアルアイテムがデータモデルインデックスにバインドされているかどうかを示します。アイテムがモデルにバインドされていない場合はtrueを返し、バインドされている場合はfalseを返します。

未解決のアイテムは、DelegateModelGroup::resolve ()関数を使用してデータモデルにバインドすることができます。

これは、デリゲートの各インスタンスにアタッチされます。


DelegateModel.itemsIndex : int

このアタッチされたプロパティは、デフォルトのitems DelegateModelGroup における項目のインデックスを保持します。

デリゲートの各インスタンスにアタッチされます。


DelegateModel.model : model

このアタッチされたプロパティは、このデリゲートのインスタンスが属するデータモデルを保持します。

これは、デリゲートの各インスタンスにアタッチされます。


DelegateModel.persistedItemsIndex : int

このアタッチされたプロパティは、persistedItems DelegateModelGroup の項目のインデックスを保持します。

これは、デリゲートの各インスタンスにアタッチされます。


メソッド・ドキュメント

QModelIndex modelIndex(int index)

QAbstractItemModel QMLはリストデータのみを扱うのに対して、この関数は階層的なツリーデータを提供します。この関数はQMLでツリーモデルを使用する際に役立ちます。

指定されたindex に対するQModelIndex を返します。この値はrootIndex に代入することができます。

rootIndexも参照してください


QModelIndex parentModelIndex()

QAbstractItemModel QMLはリストデータのみを扱うのに対して、この関数はデータの階層的なツリー を提供します。この関数はQMLでツリーモデルを使用する際に役立ちます。

現在のrootIndex の親のQModelIndex を返す。この値はrootIndex に代入することができます。

rootIndexも参照してください


©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。