이 페이지에서

QAbstractItemDelegate Class

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

헤더: #include <QAbstractItemDelegate>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
상속: QObject
상속받는 항목:

QItemDelegate 그리고 QStyledItemDelegate

공개 유형

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)
(since 6.10) bool handleEditorEvent(QObject *editor, QEvent *event)
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 ` 클래스는 이러한 함수에 대한 기본 구현을 제공하므로, 사용자 정의 렌더링이 필요하지 않은 경우 대신 해당 클래스를 상속받으십시오.

이 글에서는 항목(item)에 진행률 표시줄을 그리는 예제를 보여드리겠습니다. 이 예제는 패키지 관리 프로그램을 위한 것입니다.

다운로드 진행 상황을 표시하는 패키지 관리자

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

이 열거형은 델리게이트가 모델 및 뷰 컴포넌트에 제공할 수 있는 다양한 힌트를 정의하며, 이를 통해 사용자가 모델 내 데이터를 편리하게 편집할 수 있도록 합니다.

상수값설명
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 를 반환합니다(이벤트를 처리하지 않았음을 나타냄).

[since 6.10] bool QAbstractItemDelegate::handleEditorEvent(QObject *editor, QEvent *event)

현재 활성화된 editor 를 대신하여 이벤트에 대한 표준 처리를 구현합니다. QAbstractItemModel 하위 클래스에서 eventFilter() 메서드를 재정의하여 이 함수를 호출하고, 그 결과를 반환하십시오. 중복된 이벤트 처리를 방지하려면, 이 함수를 호출한 후에는 eventFilter()의 부모 클래스 구현을 호출하지 마십시오.

주어진 ` editor `이 유효한 ` QWidget `이고, 주어진 ` event `이 처리된 경우 ` true `을 반환하며, 그렇지 않은 경우 ` false`을 반환합니다. 다음 키 입력 이벤트는 기본적으로 처리됩니다:

  • Tab
  • Backtab
  • Enter
  • Return
  • Esc

editor 의 유형이 QTextEdit 또는 QPlainTextEdit 인 경우, Tab, Backtab, Enter 및 Return 키는 처리 되지 않습니다.

Tab, Backtab, Enter 및 Return 키가 눌리는 경우, editor 의 데이터가 모델에 반영되고 편집기가 닫힙니다. event 에서 Tab 키가 눌리면 뷰는 뷰의 다음 항목에 대해 편집기를 엽니다. 마찬가지로, event 에서 Backtab 키가 눌리면 뷰는 뷰의 이전 항목에 대해 편집기를 엽니다.

이벤트가 Esc 키 입력 이벤트인 경우, editor 는 데이터를 커밋하지 않은 채 닫힙니다.

이 함수는 Qt 6.10에서 도입되었습니다.

commitData() 및 closeEditor()도 참조하십시오 .

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

도움말 이벤트가 발생할 때마다, 이 함수는 event, view, option 및 이벤트가 발생한 항목에 해당하는 index 을 인수로 받아 호출됩니다.

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

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

QHelpEvent도 참조하십시오 .

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

사용자 정의 렌더링을 제공하려면 이 순수 추상 함수를 재구현해야 합니다. ` painter `를 사용하고 ` option `를 스타일링하여 `item 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)

index 의 sizeHint()가 변경되면 이 신호를 발신해야 합니다.

뷰는 이 신호에 자동으로 연결되며, 필요에 따라 항목의 레이아웃을 재구성합니다.

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

index 로 지정된 항목의 editor 지오메트리를, option 에 명시된 사각형에 따라 업데이트합니다. 항목에 내부 레이아웃이 있는 경우, 편집기도 이에 따라 레이아웃이 조정됩니다. 인덱스에는 사용 중인 모델에 대한 정보가 포함되어 있음을 유의하십시오.

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

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