QItemDelegate Class

QItemDelegate 클래스는 모델의 데이터 항목에 대한 표시 및 편집 기능을 제공합니다. 더 보기...

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

속성

공용 함수

QItemDelegate(QObject *parent = nullptr)
virtual ~QItemDelegate()
bool hasClipping() const
QItemEditorFactory *itemEditorFactory() const
void setClipping(bool clip)
void setItemEditorFactory(QItemEditorFactory *factory)

재구현된 공용 함수

virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
virtual void setEditorData(QWidget *editor, const QModelIndex &index) const override
virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
virtual void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override

보호된 함수

void drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
virtual void drawCheck(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, Qt::CheckState state) const
virtual void drawDecoration(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QPixmap &pixmap) const
virtual void drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const
virtual void drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const

재구현된 보호 함수

virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
virtual bool eventFilter(QObject *editor, QEvent *event) override

상세 설명

QItemDelegate는 QAbstractItemView 서브클래스를 기반으로 항목 보기에 대한 사용자 정의 표시 기능과 편집기 위젯을 제공하는 데 사용할 수 있습니다. 이 목적으로 델리게이트를 사용하면 표시 및 편집 메커니즘을 모델 및 보기와 독립적으로 사용자 정의하고 개발할 수 있습니다.

QItemDelegate 클래스는 모델/뷰 클래스 중 하나이며 Qt의 모델/뷰 프레임워크의 일부입니다. QStyledItemDelegate 에서 Qt의 아이템 뷰를 그리는 작업을 대신하고 있습니다. 새 델리게이트를 만들 때는 QStyledItemDelegate 을 사용하는 것이 좋습니다.

표준 뷰에 사용자 정의 모델의 항목을 표시할 때는 뷰에서 항목의 모양을 결정하는 roles 각각에 대해 모델이 적절한 데이터를 반환하는지 확인하는 것만으로도 충분할 때가 많습니다. Qt의 표준 뷰에서 사용되는 기본 델리게이트는 이 역할 정보를 사용하여 사용자가 예상하는 대부분의 일반적인 형태로 항목을 표시합니다. 그러나 기본 델리게이트가 제공할 수 있는 것보다 훨씬 더 많은 항목의 모양을 제어해야 하는 경우가 있습니다.

이 클래스는 뷰에서 항목 데이터를 페인팅하고 항목 모델에서 데이터를 편집하기 위한 함수의 기본 구현을 제공합니다. QAbstractItemDelegate 에 정의된 paint() 및 sizeHint() 가상 함수의 기본 구현은 델리게이트가 뷰에서 기대하는 올바른 기본 동작을 구현하도록 하기 위해 제공됩니다. 하위 클래스에서 이러한 함수를 다시 구현하여 항목의 모양을 사용자 지정할 수 있습니다.

항목 뷰에서 데이터를 편집할 때 QItemDelegate는 편집이 진행되는 동안 뷰 위에 배치되는 위젯인 편집기 위젯을 제공합니다. 편집기는 QItemEditorFactory; QItemEditorFactory 에서 제공하는 기본 정적 인스턴스가 모든 항목 델리게이트에 설치됩니다. setItemEditorFactory ()를 사용하여 사용자 지정 팩토리를 설정하거나 QItemEditorFactory::setDefaultFactory()로 새 기본 팩토리를 설정할 수 있습니다. 편집되는 것은 Qt::EditRole 을 사용하여 항목 모델에 저장된 데이터입니다.

여기에서는 위젯 기반 델리게이트에 대한 표준 편집 함수만 다시 구현됩니다:

  • createEditor()는 모델에서 데이터를 변경하는 데 사용되는 위젯을 반환하며 편집 동작을 사용자 지정하기 위해 다시 구현할 수 있습니다.
  • setEditorData()는 위젯에 조작할 데이터를 제공합니다.
  • updateEditorGeometry()는 편집기가 항목 보기와 관련하여 올바르게 표시되도록 합니다.
  • setModelData()는 업데이트된 데이터를 모델에 반환합니다.

closeEditor() 신호는 사용자가 데이터 편집을 완료했음을 나타내며 편집기 위젯을 삭제할 수 있음을 나타냅니다.

표준 역할 및 데이터 유형

Qt와 함께 제공되는 표준 뷰에서 사용되는 기본 델리게이트는 각 표준 역할( Qt::ItemDataRole)을 특정 데이터 유형과 연결합니다. 이러한 유형의 데이터를 반환하는 모델은 다음 표에 설명된 대로 델리게이트의 모양에 영향을 줄 수 있습니다.

기본 델리게이트가 표시 목적이나 데이터 편집을 위해 필요한 수준의 사용자 정의를 허용하지 않는 경우, QItemDelegate를 서브클래스화하여 원하는 동작을 구현할 수 있습니다.

서브클래싱

사용자 지정 렌더러를 사용하여 항목을 표시하는 델리게이트를 만들기 위해 QItemDelegate를 서브클래싱할 때는 델리게이트가 선택, 비활성화, 체크 등 필요한 모든 상태에 맞게 항목을 렌더링할 수 있는지 확인하는 것이 중요합니다. paint () 함수에 대한 문서에는 이를 달성하는 방법에 대한 몇 가지 힌트가 나와 있습니다.

QItemEditorFactory 을 사용하여 사용자 지정 편집기를 제공할 수 있습니다. 다음 코드는 기본 아이템 편집기 팩토리를 사용하여 대표단이 사용자 지정 편집기를 사용할 수 있도록 하는 방법을 보여줍니다.

QItemEditorFactory *editorFactory = new QItemEditorFactory;
QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<MyFancyDateTimeEdit>();
editorFactory->registerEditor(QMetaType::QDateTime, creator);

QItemEditorFactory::setDefaultFactory(editorFactory);

기본 팩토리가 설정되면 모든 표준 항목 위임자가 이 팩토리를 사용하게 됩니다(기본 팩토리를 설정하기 전에 만든 위임자도 마찬가지입니다).

이렇게 하면 QItemDelegate의 서브 클래싱을 피할 수 있으며 지정된 유형(예: QMetaType::QDateTime)의 모든 값은 제공된 편집기(예: 위 예제의 MyFancyDateTimeEdit )를 사용하여 편집됩니다.

다른 방법은 createEditor(), setEditorData(), setModelData() 및 updateEditorGeometry()을 다시 구현하는 것입니다. 이 프로세스는 모델/보기 프로그래밍 개요 문서에 설명되어 있습니다.

Q스타일드 아이템 델리게이트와 Q아이템 델리게이트 비교

Qt 4.4부터 두 개의 델리게이트 클래스가 있습니다: QItemDelegate 와 QStyledItemDelegate. 그러나 기본 델리게이트는 QStyledItemDelegate 입니다. 이 두 클래스는 뷰의 항목에 대한 에디터 페인팅과 제공에 대한 독립적인 대안입니다. 두 클래스의 차이점은 QStyledItemDelegate 은 현재 스타일을 사용하여 항목을 페인팅한다는 것입니다. 따라서 사용자 정의 델리게이트를 구현할 때나 Qt 스타일 시트로 작업할 때는 QStyledItemDelegate 을 기본 클래스로 사용하는 것이 좋습니다. 사용자 정의 델리게이트가 그리기에 스타일을 사용해야 하는 경우가 아니라면 두 클래스에 필요한 코드는 동일해야 합니다.

델리게이트 클래스, QStyledItemDelegate, 및 QAbstractItemDelegate참조하십시오 .

속성 문서

clipping : bool

델리게이트가 페인트 이벤트를 클립해야 하는 경우

이 속성은 페인트 클립을 항목의 크기로 설정합니다. 기본값은 켜짐입니다. 이미지가 항목의 크기보다 큰 경우와 같은 경우에 유용합니다.

액세스 함수:

bool hasClipping() const
void setClipping(bool clip)

멤버 함수 문서

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

주어진 parent 으로 항목 델리게이트를 구성합니다.

[virtual noexcept] QItemDelegate::~QItemDelegate()

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

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

재 구현합니다: QAbstractItemDelegate::createEditor(QWidget *부모, const Q스타일옵션뷰아이템 &옵션, const Q모델인덱스 &인덱스) const.

편집을 위해 index 에 지정된 항목을 편집하는 데 사용되는 위젯을 리턴합니다. parent 위젯과 option 스타일은 편집기 위젯이 표시되는 방식을 제어하는 데 사용됩니다.

QAbstractItemDelegate::createEditor()도 참조하세요 .

[protected] void QItemDelegate::drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

주어진 painter 및 스타일 option 을 사용하여 주어진 index 에 대한 항목 배경을 렌더링합니다.

[virtual protected] void QItemDelegate::drawCheck(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, Qt::CheckState state) const

rect지정된 painter 및 스타일 option 을 사용하여 지정된 state 으로 지정된 사각형 내에 체크 표시기를 렌더링합니다.

[virtual protected] void QItemDelegate::drawDecoration(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QPixmap &pixmap) const

지정된 painter 및 스타일 option 을 사용하여 rect 에 지정된 사각형 내에 장식 pixmap 을 렌더링합니다.

[virtual protected] void QItemDelegate::drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const

지정된 painter 및 스타일 option 을 사용하여 rect 에 지정된 사각형 내에 항목 보기 text 를 렌더링합니다.

[virtual protected] void QItemDelegate::drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const

지정된 painter 및 스타일 option 을 사용하여 포커스가 있음을 나타내는 rect 으로 지정된 사각형 내의 영역을 렌더링합니다.

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

재구현합니다: QAbstractItemDelegate::editorEvent(QEvent * 이벤트, QAbstractItemModel * 모델, const Q스타일옵션뷰 아이템 &옵션, const Q모델 인덱스 &인덱스).

[override virtual protected] bool QItemDelegate::eventFilter(QObject *editor, QEvent *event)

다시 구현합니다: QObject::eventFilter(QObject *watched, QEvent *event).

주어진 editor 이 유효한 QWidget 이고 주어진 event 이 처리되면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다. 기본적으로 다음과 같은 키 누르기 이벤트가 처리됩니다:

  • Tab
  • Backtab
  • Enter
  • Return
  • Esc

Tab, Backtab, EnterReturn 키 누름 이벤트의 경우 editor 의 데이터가 모델에 커밋되고 에디터가 닫힙니다. eventTab 키인 경우 뷰의 다음 항목에 대한 편집기가 열립니다. 마찬가지로 event 키가 Backtab 키인 경우 뷰의 이전 항목에 대한 편집기가 열립니다.

이벤트가 Esc 키 누름 이벤트인 경우 editor 은 데이터를 커밋하지 않고 닫힙니다.

commitData() 및 closeEditor()도 참조하세요 .

QItemEditorFactory *QItemDelegate::itemEditorFactory() const

아이템 델리게이트가 사용하는 편집기 팩토리를 반환합니다. 편집기 팩토리가 설정되어 있지 않으면 이 함수는 null을 반환합니다.

setItemEditorFactory()도 참조하세요 .

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

재 구현합니다: QAbstractItemDelegate::paint(QPainter *페인터, const QStyleOptionViewItem &option, const QModelIndex &index) const.

index 에 지정된 항목에 대해 주어진 painter 와 스타일 option 을 사용하여 델리게이트를 렌더링합니다.

하위 클래스에서 이 함수를 다시 구현할 때는 옵션의 rect 변수가 보유한 영역을 업데이트하고, 옵션의 state 변수를 사용하여 표시할 항목의 상태를 결정하고 그에 따라 렌더링 방식을 조정해야 합니다.

예를 들어 다음 코드와 같이 선택한 항목은 선택하지 않은 항목과 다르게 표시해야 할 수 있습니다:

if (option.state & QStyle::State_Selected)
    painter->fillRect(option.rect, option.palette.highlight());

페인팅 후에는 페인터가 이 함수를 호출했을 때 제공된 상태로 되돌아가는지 확인해야 합니다. 예를 들어 페인팅하기 전에 QPainter::save()를 호출하고 이후에는 QPainter::restore()를 호출하는 것이 유용할 수 있습니다.

QStyle::State참조하세요 .

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

재구현합니다: QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const.

모델 index 에 지정된 데이터 모델 항목에서 editor 에 표시 및 편집할 데이터를 설정합니다.

기본 구현은 editor 위젯의 사용자 프로퍼티에 데이터를 저장합니다.

QMetaProperty::isUser()도 참조하세요 .

void QItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)

항목 델리게이트에서 사용할 편집기 팩토리를 지정된 factory 로 설정합니다. 편집기 팩토리를 설정하지 않으면 항목 위임자는 기본 편집기 팩토리를 사용합니다.

itemEditorFactory()도 참조하세요 .

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

재 구현합니다: QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const.

editor 위젯에서 데이터를 가져와 지정된 model 항목의 index 에 저장합니다.

기본 구현은 editor 위젯의 사용자 속성에서 데이터 모델에 저장할 값을 가져옵니다.

QMetaProperty::isUser()도 참조하세요 .

[override virtual] QSize QItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const

재구현합니다: QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const.

option 에서 제공된 스타일 정보를 고려하여 델리게이트가 index 에 지정된 항목을 표시하는 데 필요한 크기를 반환합니다.

이 함수를 다시 구현할 때 텍스트 항목의 경우 QItemDelegate 는 텍스트 길이에 여백(예: 2 * QStyle::PM_FocusFrameHMargin)을 추가한다는 점에 유의하세요.

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

재 구현합니다: QAbstractItemDelegate::updateEditorGeometry(QWidget *편집기, 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.