DelegateModel QML Type

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

Import Statement: import QtQml.Models

プロパティ

付属物件

方法

詳細な説明

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)
{
    QGuiApplication app(argc, argv);

    QQuickView view;

    QFileSystemModel model;
    // start populating the model (doesn't change the model's root)
    model.setRootPath(QDir::currentPath());

    qmlRegisterSingletonInstance("FileSystemModule", 1, 0, "FileSystemModel", &model);
    view.setSource(QUrl::fromLocalFile("view.qml"));
    view.show();

    return app.exec();
}

view.qml:

import QtQuick
import QtQml.Models
import FileSystemModule

pragma ComponentBehavior: Bound

ListView {
    id: view
    width: 300
    height: 400

    model: DelegateModel {
        id: delegateModel
        model: FileSystemModel // singleton

        delegate: Rectangle {
            id: delegate
            required property int index
            required property string filePath
            required property bool hasModelChildren

            width: 300; height: 25
            color: index % 2 ? palette.alternateBase : palette.base

            Text {
                anchors.verticalCenter: parent.verticalCenter
                color: palette.text
                text: delegate.filePath
            }

            TapHandler {
                onTapped: if (delegate.hasModelChildren)
                              delegateModel.rootIndex = delegateModel.modelIndex(delegate.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も参照して ください。


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.