DelegateModel QML Type
모델과 위임자를 캡슐화합니다. 더 보기...
Import Statement: | import QtQml.Models |
속성
- count : int
- delegate : Component
- filterOnGroup : string
- groups : list<DelegateModelGroup>
- items : DelegateModelGroup
- model : model
- parts : object
- persistedItems : DelegateModelGroup
- rootIndex : QModelIndex
첨부 속성
- groups : stringlist
- 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 에 할당하면 하나의 열만 표시됩니다.
아래 예시는 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 |
groups : list<DelegateModelGroup> |
이 속성은 델리게이트 모델의 그룹 정의를 보유합니다.
그룹은 델리게이트 모델에 있는 항목의 하위 집합을 정의하며 모델을 필터링하는 데 사용할 수 있습니다.
DelegateModel 에 정의된 모든 그룹에 대해 두 개의 의사 프로퍼티가 각 델리게이트 항목에 추가됩니다. DelegateModel .inGroupName 형식의 첫 번째는 항목이 그룹에 속해 있는지 여부를 담고, 두 번째 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 에서 델리게이트라는 이름의 목록을 만드는 모델을 선택합니다:
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 : stringlist |
이 첨부 프로퍼티는 항목이 속한 DelegateModelGroups의 이름을 보유합니다.
델리게이트의 각 인스턴스에 첨부됩니다.
DelegateModel.inItems : bool |
이 첨부 프로퍼티는 항목이 기본값 items DelegateModelGroup 에 속하는지 여부를 보유합니다.
이 속성을 변경하면 항목 그룹에서 항목이 추가되거나 제거됩니다.
델리게이트의 각 인스턴스에 첨부됩니다.
DelegateModel.inPersistedItems : bool |
이 첨부된 속성은 항목이 persistedItems DelegateModelGroup 에 속하는지 여부를 보유합니다.
이 속성을 변경하면 항목 그룹에서 항목이 추가되거나 제거됩니다. persistedItems 그룹에서 항목을 제거하면 모델에서 참조하지 않는 경우 현재 인스턴스가 파괴되므로 주의해서 변경하세요.
델리게이트의 각 인스턴스에 첨부됩니다.
DelegateModel.isUnresolved : bool |
이 첨부 속성은 시각적 항목이 데이터 모델 인덱스에 바인딩되어 있는지 여부를 나타냅니다. 항목이 모델에 바인딩되어 있지 않으면 참을 반환하고, 바인딩되어 있으면 거짓을 반환합니다.
해결되지 않은 항목은 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.