DelegateModel QML Type
モデルとデリゲートをカプセル化します。詳細...
| Import Statement: | import QtQml.Models |
プロパティ
- count : int
- delegate : Component
- delegateModelAccess : enumeration
(since 6.10) - filterOnGroup : string
- groups : list<DelegateModelGroup>
- items : DelegateModelGroup
- model : model
- parts : object
- persistedItems : DelegateModelGroup
- rootIndex : QModelIndex
関連するプロパティ
- groups : list<string>
- inItems : bool
- inPersistedItems : bool
- isUnresolved : bool
- itemsIndex : int
- model : model
- persistedItemsIndex : int
方法
- QModelIndex modelIndex(int index)
- QModelIndex parentModelIndex()
詳細な説明
DelegateModel 型は、モデルと、そのモデル内の項目に対してインスタンス化されるデリゲートをカプセル化します。
通常、DelegateModelを作成する必要はありません。ただし、モデルとしてQAbstractItemModel のサブクラスを使用する場合、modelIndex を操作したりアクセスしたりするのに役立ちます。また、DelegateModelはPackage と組み合わせて複数のビューにデリゲートを提供したり、DelegateModelGroup と組み合わせてデリゲート項目を並べ替えたりフィルタリングしたりするために使用されます。
DelegateModel は 1 次元のモデルのみをサポートしています。したがって、テーブルモデルを DelegateModel に割り当て、それをTableView に割り当てても、1 列しか表示されません。
以下の例は、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 というアクセス可能なプロパティとして公開されます。また、データモデルのタイプに応じて、モデルのプロパティも利用可能です。
delegateModelAccess : enumeration [since 6.10]
このプロパティは、デリゲートがモデルにアクセスする方法を決定します。
| 定数 | 説明 |
|---|---|
DelegateModel.ReadOnly | デリゲートが、コンテキストプロパティ、model オブジェクト、または必須プロパティのいずれかを介してモデルを書き込むことを禁止します。 |
DelegateModel.ReadWrite | デリゲートが、コンテキスト プロパティ、model オブジェクト、または必須プロパティのいずれかを介してモデルに書き込みを行うことを許可します。 |
DelegateModel.Qt5ReadWrite | デリゲートが、model オブジェクトおよびコンテキスト プロパティを介してモデルへの書き込みを行えるようにしますが、必須プロパティを介した書き込みは許可しません。 |
デフォルトは `DelegateModel.Qt5ReadWrite` です。
このプロパティは Qt 6.10 で導入されました。
「 Qt Quick におけるモデルとビュー #モデルデータの変更」も参照してください 。
filterOnGroup : string
このプロパティには、デリゲート・モデルのフィルタリングに使用されるグループの名前が格納されます。
ビューには、このグループに属する項目のみが表示されます。
デフォルトでは、これは「items 」グループです。
groups : list<DelegateModelGroup>
このプロパティには、デリゲート・モデルのグループ定義が格納されます。
グループは、デリゲートモデル内の項目のサブセットを定義し、モデルのフィルタリングに使用できます。
DelegateModel で定義されたグループごとに、各デリゲート項目に 2 つの関連付けられた疑似プロパティが追加されます。1 つ目は「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
}items : DelegateModelGroup
このプロパティは、すべての新しい項目が追加されるデフォルトのグループを保持します。
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
このプロパティは、デリゲートモデルの永続化済みアイテムのグループを保持します。
このグループ内のアイテムは、ビューによって解放されても破棄されることはなく、グループから削除されるまで永続化されます。
DelegateModel.inPersistedItems プロパティをfalseに設定することで、persistedItemsグループからアイテムを削除できます。その時点でそのアイテムがビューから参照されていない場合、アイテムは破棄されます。このグループにアイテムを追加しても、新しいインスタンスは作成されません。
QtQml.Models::DelegateModelGroup::create() 関数によって返されるアイテムは、自動的にこのグループに追加されます。
rootIndex : QModelIndex
QAbstractItemModel データ階層ツリーを提供するのに対し、QMLはリストデータのみを扱います。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)
}
}
}
}model がQAbstractItemModel のサブクラスである場合、デリゲートはhasModelChildren プロパティ(オプションでmodel.というプレフィックスを付けることも可能)を参照して、そのデリゲートのモデル項目に子ノードがあるかどうかを確認することもできます。
modelIndex() およびparentModelIndex()も参照してください 。
添付プロパティのドキュメント
DelegateModel.groups : list<string> [attached]
この添付プロパティには、その項目が属する DelegateModelGroups の名前が格納されます。
これは、デリゲートの各インスタンスに紐付けられています。
DelegateModel.inItems : bool [attached]
この添付プロパティは、そのアイテムがデフォルトのitems DelegateModelGroup に属しているかどうかを示します。
このプロパティを変更すると、アイテムがアイテムグループに追加または削除されます。
このプロパティは、デリゲートの各インスタンスに紐付けられています。
DelegateModel.inPersistedItems : bool [attached]
この添付プロパティは、そのアイテムが「persistedItems 」DelegateModelGroup に属しているかどうかを示します。
このプロパティを変更すると、そのアイテムが items グループに追加または削除されます。persistedItems グループからアイテムを削除すると、そのアイテムがモデルによって参照されていない場合、現在のインスタンスが破棄されるため、変更には十分注意してください。
このプロパティは、デリゲートの各インスタンスに紐付けられています。
DelegateModel.isUnresolved : bool [attached]
この添付プロパティは、ビジュアルアイテムがデータモデルのインデックスにバインドされているかどうかを示します。アイテムがモデルにバインドされていない場合は true を返し、バインドされている場合は false を返します。
未解決のアイテムは、DelegateModelGroup::resolve() 関数を使用してデータモデルにバインドすることができます。
これは、デリゲートの各インスタンスに紐付けられています。
DelegateModel.itemsIndex : int [attached]
このアタッチドプロパティは、デフォルトのitems DelegateModelGroup 内の項目のインデックスを保持します。
これは、デリゲートの各インスタンスに紐付けられています。
DelegateModel.model : model [attached]
この添付プロパティには、このデリゲートインスタンスが属するデータモデルが格納されています。
これは、デリゲートの各インスタンスに紐付けられています。
DelegateModel.persistedItemsIndex : int [attached]
このアタッチドプロパティは、persistedItems DelegateModelGroup 内の項目のインデックスを保持します。
これは、デリゲートの各インスタンスに紐付けられています。
メソッドのドキュメント
QModelIndex modelIndex(int index)
QAbstractItemModel データ階層ツリーを提供するのに対し、QMLはリストデータのみを扱います。この関数は、QMLでツリーモデルを使用する際に役立ちます。
指定されたindex に対するQModelIndex を返します。この値をrootIndex に代入することができます。
「rootIndex」も参照してください 。
QModelIndex parentModelIndex()
QAbstractItemModel データ階層ツリーを提供するのに対し、QMLはリストデータのみを扱います。この関数は、QMLでツリーモデルを使用する際に役立ちます。
現在のrootIndex の親に対するQModelIndex を返します。この値をrootIndex に代入することができます。
「rootIndex」も参照してください 。
© 2026 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.