이 페이지에서

DelegateModel QML Type

모델과 델리게이트를 캡슐화합니다. 더 보기...

Import Statement: import QtQml.Models

속성

연관 속성

방법

상세 설명

DelegateModel 유형은 모델과 모델 내 항목에 대해 인스턴스화될 델리게이트를 캡슐화합니다.

일반적으로 DelegateModel을 직접 생성할 필요는 없습니다. 그러나 모델로 ` QAbstractItemModel `의 하위 클래스를 사용할 때 ` modelIndex `을 조작하거나 액세스하는 데 유용할 수 있습니다. 또한, DelegateModel은 ` Package `과 함께 사용되어 여러 뷰에 델리게이트를 제공하거나, ` DelegateModelGroup `과 함께 사용되어 델리게이트 항목을 정렬 및 필터링하는 데 활용됩니다.

DelegateModel은 1차원 모델만 지원합니다. 따라서 테이블 모델을 DelegateModel에 할당하고, 이를 TableView 에 할당하면 하나의 열만 표시됩니다.

아래 예제는 DelegateModel을 ListView 과 함께 사용하는 방법을 보여줍니다.

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 에 정의된 각 그룹에 대해, 각 델리게이트 항목에 두 개의 첨부된 의사 속성이 추가됩니다. 첫 번째 속성은 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 의 서브클래스이거나 단순한 리스트여야 합니다.

모델은 QML에서 직접 생성할 수도 있으며, 예를 들어 ` ListModel`를 사용할 수 있습니다.

‘데이터 모델’항목도 참조하십시오 .

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.