QAbstractItemDelegate Class

QAbstractItemDelegate 클래스는 모델에서 데이터 항목을 표시하고 편집하는 데 사용됩니다. 더 보기...

Header: #include <QAbstractItemDelegate>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속합니다: QObject
상속 대상

QItemDelegateQStyledItemDelegate

공용 유형

enum EndEditHint { NoHint, EditNextItem, EditPreviousItem, SubmitModelCache, RevertModelCache }

공용 함수

QAbstractItemDelegate(QObject *parent = nullptr)
virtual ~QAbstractItemDelegate()
virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
virtual void destroyEditor(QWidget *editor, const QModelIndex &index) const
virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
virtual bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index)
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const = 0
virtual void setEditorData(QWidget *editor, const QModelIndex &index) const
virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const = 0
virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const

시그널

void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint)
void commitData(QWidget *editor)
void sizeHintChanged(const QModelIndex &index)

상세 설명

QAbstractItemDelegate는 모델/뷰 아키텍처에서 델리게이트를 위한 인터페이스와 공통 기능을 제공합니다. 델리게이트는 뷰에 개별 항목을 표시하고 모델 데이터의 편집을 처리합니다.

QAbstractItemDelegate 클래스는 모델/뷰 클래스 중 하나이며 Qt의 모델/뷰 프레임워크의 일부입니다.

사용자 정의 방식으로 항목을 렌더링하려면 paint() 및 sizeHint()을 구현해야 합니다. QStyledItemDelegate 클래스는 이러한 함수에 대한 기본 구현을 제공하며, 사용자 정의 렌더링이 필요하지 않은 경우 해당 클래스를 서브클래스화합니다.

여기서는 패키지 관리 프로그램의 경우 항목에 진행률 표시줄을 그리는 예를 들어 보겠습니다.

QStyledItemDelegate 에서 상속하는 WidgetDelegate 클래스를 만듭니다. paint() 함수에서 그리기를 수행합니다:

void WidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                           const QModelIndex &index) const
{
    if (index.column() == 1) {
        int progress = index.data().toInt();

        QStyleOptionProgressBar progressBarOption;
        progressBarOption.rect = option.rect;
        progressBarOption.minimum = 0;
        progressBarOption.maximum = 100;
        progressBarOption.progress = progress;
        progressBarOption.text = QString::number(progress) + "%";
        progressBarOption.textVisible = true;

        QApplication::style()->drawControl(QStyle::CE_ProgressBar,
                                           &progressBarOption, painter);
    } else
        QStyledItemDelegate::paint(painter, option, index);

QStyleOptionProgressBar 를 사용하고 그 멤버를 초기화합니다. 그런 다음 현재 QStyle 를 사용하여 그릴 수 있습니다.

사용자 정의 편집을 제공하기 위해 두 가지 접근 방식을 사용할 수 있습니다. 첫 번째 접근 방식은 편집기 위젯을 만들어 항목 위에 직접 표시하는 것입니다. 이렇게 하려면 편집기 위젯을 제공하기 위해 createEditor(), 모델의 데이터로 편집기를 채우기 위해 setEditorData(), 델리게이트가 편집기의 데이터로 모델을 업데이트할 수 있도록 setModelData()를 다시 구현해야 합니다.

두 번째 접근 방식은 editorEvent()를 다시 구현하여 사용자 이벤트를 직접 처리하는 것입니다.

모델/뷰 프로그래밍, QStyledItemDelegate, 및 QStyle참조하세요 .

멤버 유형 문서

enum QAbstractItemDelegate::EndEditHint

이 열거형은 델리게이트가 모델 및 뷰 구성 요소에 제공할 수 있는 다양한 힌트를 설명하여 사용자가 모델에서 데이터를 편안하게 편집할 수 있도록 합니다.

Constant설명
QAbstractItemDelegate::NoHint0수행해야 할 권장 작업이 없습니다.

이러한 힌트를 통해 델리게이트가 뷰의 동작에 영향을 줄 수 있습니다:

상수설명
QAbstractItemDelegate::EditNextItem1뷰에서 델리게이트를 사용하여 뷰의 다음 항목에서 편집기를 열어야 합니다.
QAbstractItemDelegate::EditPreviousItem2뷰에서 델리게이트를 사용하여 뷰의 이전 항목에 대한 편집기를 열어야 합니다.

사용자 지정 뷰에서는 다음 및 이전 개념을 다르게 해석할 수 있습니다.

다음 힌트는 성능을 높이거나 네트워크 대역폭을 절약하기 위해 데이터를 로컬로 조작하는 모델과 같이 데이터를 캐시하는 모델을 사용할 때 가장 유용합니다.

상수설명
QAbstractItemDelegate::SubmitModelCache3모델이 데이터를 캐시하는 경우 캐시된 데이터를 기본 데이터 저장소에 기록해야 합니다.
QAbstractItemDelegate::RevertModelCache4모델이 데이터를 캐시하는 경우 캐시된 데이터를 삭제하고 기초 데이터 저장소의 데이터로 대체해야 합니다.

모델 및 뷰는 이러한 힌트에 적절한 방식으로 응답해야 하지만 사용자 지정 구성 요소는 관련성이 없는 경우 힌트의 일부 또는 전부를 무시할 수 있습니다.

멤버 함수 문서

[explicit] QAbstractItemDelegate::QAbstractItemDelegate(QObject *parent = nullptr)

주어진 parent 으로 새 추상 항목 델리게이트를 생성합니다.

[virtual noexcept] QAbstractItemDelegate::~QAbstractItemDelegate()

추상 아이템 델리게이트를 파괴합니다.

[signal] void QAbstractItemDelegate::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint)

이 신호는 사용자가 지정된 editor 을 사용하여 항목 편집을 마쳤을 때 전송됩니다.

hint 은 델리게이트가 편집이 완료된 후 모델 및 뷰의 동작 방식에 영향을 줄 수 있는 방법을 제공합니다. 사용자에게 편안한 편집 환경을 제공하기 위해 다음에 수행해야 할 작업을 이러한 구성 요소에 나타냅니다. 예를 들어 EditNextItem 이 지정된 경우 뷰는 델리게이트를 사용하여 모델의 다음 항목에서 편집기를 열어야 합니다.

EndEditHint참조하십시오 .

[signal] void QAbstractItemDelegate::commitData(QWidget *editor)

이 신호는 editor 위젯이 데이터 편집을 완료하고 모델에 다시 쓰려고 할 때 발생해야 합니다.

[virtual] QWidget *QAbstractItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const

주어진 index 으로 데이터 항목을 편집하는 데 사용할 편집기를 반환합니다. 인덱스에는 사용 중인 모델에 대한 정보가 포함되어 있습니다. 편집기의 부모 위젯은 parent 으로, 항목 옵션은 option 으로 지정됩니다.

기본 구현은 nullptr 을 반환합니다. 사용자 정의 편집을 원한다면 이 함수를 다시 구현해야 합니다.

반환된 편집기 위젯에는 Qt::StrongFocus 이 있어야 하며, 그렇지 않으면 위젯이 수신한 QMouseEvent이 뷰에 전파됩니다. 편집기가 자체 배경을 그리지 않는 한(예: setAutoFillBackground()) 뷰의 배경이 빛납니다.

destroyEditor(), setModelData() 및 setEditorData()도 참조하십시오 .

[virtual] void QAbstractItemDelegate::destroyEditor(QWidget *editor, const QModelIndex &index) const

지정된 index 으로 데이터 항목을 편집하는 데 editor 이 더 이상 필요하지 않으므로 삭제해야 할 때 호출됩니다. 기본 동작은 편집기에서 deleteLater를 호출하는 것입니다. 예를 들어 이 함수를 다시 구현하여 이 삭제를 피할 수 있습니다.

createEditor()도 참조하세요 .

[virtual] bool QAbstractItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)

항목 편집이 시작되면 이 함수는 편집을 트리거한 event, model, 항목의 index 및 항목 렌더링에 사용된 option 과 함께 호출됩니다.

마우스 이벤트는 항목 편집이 시작되지 않더라도 editorEvent()로 전송됩니다. 예를 들어 항목에서 마우스 오른쪽 버튼을 눌렀을 때 컨텍스트 메뉴를 열려는 경우 유용할 수 있습니다.

기본 구현은 false (이벤트를 처리하지 않았음을 나타냄)를 반환합니다.

[virtual] bool QAbstractItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index)

헬프 이벤트가 발생할 때마다 이 함수는 이벤트가 발생한 항목에 해당하는 event view optionindex 을 사용하여 호출됩니다.

델리게이트가 이벤트를 처리할 수 있으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다. 반환값이 true이면 인덱스를 사용하여 얻은 데이터에 필요한 역할이 있음을 나타냅니다.

성공적으로 처리된 QEvent::ToolTipQEvent::WhatsThis 이벤트의 경우 사용자의 시스템 구성에 따라 관련 팝업이 표시될 수 있습니다.

QHelpEvent도 참조하세요 .

[pure virtual] void QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

사용자 정의 렌더링을 제공하려면 이 순수 추상 함수를 다시 구현해야 합니다. painter 및 스타일 option 을 사용하여 index 항목에 지정된 항목을 렌더링합니다.

이를 다시 구현하는 경우 sizeHint()도 다시 구현해야 합니다.

[virtual] void QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const

주어진 editor 의 내용을 주어진 index 의 항목 데이터로 설정합니다. 인덱스에는 사용 중인 모델에 대한 정보가 포함되어 있습니다.

기본 구현은 아무 작업도 수행하지 않습니다. 사용자 정의 편집을 원하면 이 함수를 다시 구현해야 합니다.

setModelData()도 참조하세요 .

[virtual] void QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const

model 의 지정된 index 에 있는 항목의 데이터를 지정된 editor 의 내용으로 설정합니다.

기본 구현은 아무것도 하지 않습니다. 사용자 정의 편집을 원하면 이 함수를 다시 구현해야 합니다.

setEditorData()도 참조하세요 .

[pure virtual] QSize QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const

사용자 정의 렌더링을 제공하려면 이 순수 추상 함수를 다시 구현해야 합니다. 옵션은 option 으로, 모델 항목은 index 으로 지정합니다.

이를 다시 구현하는 경우 paint()도 다시 구현해야 합니다.

[signal] void QAbstractItemDelegate::sizeHintChanged(const QModelIndex &index)

이 신호는 indexsizeHint()가 변경될 때 발생해야 합니다.

뷰는 이 신호에 자동으로 연결하여 필요에 따라 항목을 릴레이 아웃합니다.

[virtual] void QAbstractItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const

option 에 지정된 사각형에 따라 지정된 index 으로 항목에 대한 editor 의 지오메트리를 업데이트합니다. 항목에 내부 레이아웃이 있는 경우 편집기가 그에 따라 배치됩니다. 색인에는 사용 중인 모델에 대한 정보가 포함되어 있습니다.

기본 구현은 아무것도 하지 않습니다. 사용자 지정 편집을 원하면 이 기능을 다시 구현해야 합니다.

© 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.