QStyledItemDelegate Class

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

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

QSqlRelationalDelegate

공용 함수

QStyledItemDelegate(QObject *parent = nullptr)
virtual ~QStyledItemDelegate()
virtual QString displayText(const QVariant &value, const QLocale &locale) const
QItemEditorFactory *itemEditorFactory() const
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

보호된 함수

virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const

재구현된 보호 함수

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

상세 설명

Qt 아이템 뷰에서 모델의 데이터를 표시할 때, 예를 들어 QTableView, 개별 아이템은 델리게이트에 의해 그려집니다. 또한 항목이 편집될 때 편집 위젯을 제공하여 편집이 진행되는 동안 항목 뷰 위에 배치됩니다. QStyledItemDelegate는 모든 Qt 항목 보기의 기본 델리게이트이며, 항목 보기가 생성될 때 설치됩니다.

QStyledItemDelegate 클래스는 모델/뷰 클래스 중 하나이며 Qt의 모델/뷰 프레임워크의 일부입니다. 이 델리게이트를 사용하면 모델 및 뷰와 독립적으로 항목의 표시 및 편집을 개발할 수 있습니다.

모델의 항목 데이터에는 ItemDataRole; 각 항목은 각 역할에 대해 QVariant 을 저장할 수 있습니다. QStyledItemDelegate는 부울, 정수 및 문자열을 포함하여 사용자가 예상하는 가장 일반적인 데이터 유형에 대한 표시 및 편집을 구현합니다.

데이터는 모델에서 어떤 역할을 하느냐에 따라 다르게 그려집니다. 다음 표에서는 각 역할과 각 역할에 대해 델리게이트가 처리할 수 있는 데이터 유형에 대해 설명합니다. 뷰에서 항목의 모양을 결정하기 위해 모델이 각 역할에 적합한 데이터를 반환하는 것으로 충분할 때가 많습니다.

편집기는 QItemEditorFactory 으로 생성되며 QItemEditorFactory 에서 제공하는 기본 정적 인스턴스가 모든 항목 델리게이트에 설치됩니다. setItemEditorFactory ()를 사용하여 사용자 정의 팩토리를 설정하거나 QItemEditorFactory::setDefaultFactory()로 새 기본 팩토리를 설정할 수 있습니다.

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

QItemEditorFactory::setDefaultFactory(editorFactory);

새 팩토리가 설정되면 모든 표준 항목 델리게이트가 이를 사용합니다(즉, 새 기본 팩토리가 설정되기 전에 만들어진 델리게이트도 마찬가지입니다).

편집되는 것은 EditRole 으로 항목 모델에 저장된 데이터입니다. 아이템 편집기 팩토리에 대한 자세한 소개는 QItemEditorFactory 클래스를 참조하세요.

QStyledItemDelegate 서브클래스화하기

델리게이트가 필요한 데이터 유형 그리기를 지원하지 않거나 항목 그리기를 사용자 지정하려는 경우 QStyledItemDelegate를 서브클래싱하고 paint() 및 sizeHint()를 다시 구현해야 합니다. paint () 함수는 각 항목에 대해 개별적으로 호출되며 sizeHint()를 사용하면 각 항목에 대한 힌트를 지정할 수 있습니다.

paint()를 다시 구현할 때는 일반적으로 그리려는 데이터 유형을 처리하고 다른 유형에 대해서는 수퍼클래스 구현을 사용합니다.

체크 박스 표시기의 그림은 현재 스타일에 의해 수행됩니다. 스타일은 또한 다양한 데이터 역할에 대한 데이터를 그릴 크기와 경계 사각형을 지정합니다. 항목 자체의 경계 사각형도 스타일에 의해 계산됩니다. 따라서 이미 지원되는 데이터 유형을 그릴 때는 스타일에 이러한 경계 사각형을 요청하는 것이 좋습니다. QStyle 클래스 설명에 더 자세히 설명되어 있습니다.

스타일에 의해 계산된 경계 사각형이나 체크박스 표시기의 그림을 변경하려면 QStyle 을 서브클래싱하면 됩니다. 그러나 sizeHint()를 다시 구현하면 항목의 크기도 영향을 받을 수 있습니다.

사용자 지정 델리게이트가 에디터 항목 팩토리를 사용하지 않고도 에디터를 제공할 수 있습니다. 이 경우 다음 가상 함수를 다시 구현해야 합니다:

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

스타 델리게이트 예제는 이러한 메서드를 재구현하여 에디터를 생성합니다.

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

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

항목 보기의 그림을 사용자 정의하려면 사용자 정의 스타일을 구현해야 합니다. 자세한 내용은 QStyle 클래스 문서를 참조하세요.

델리게이트 클래스, QItemDelegate, QAbstractItemDelegate, QStyle, 스타 델리게이트 예시도참조하세요 .

멤버 함수 문서

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

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

[virtual noexcept] QStyledItemDelegate::~QStyledItemDelegate()

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

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

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

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

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

[virtual] QString QStyledItemDelegate::displayText(const QVariant &value, const QLocale &locale) const

이 함수는 델리게이트가 locale 에서 모델의 Qt::DisplayRole 을 표시하는 데 사용할 문자열을 반환합니다. value 은 모델에서 제공한 Qt::DisplayRole 의 값입니다.

기본 구현은 QLocale::toString 을 사용하여 valueQString 로 변환합니다.

이 함수는 빈 모델 인덱스, 즉 모델이 유효하지 않은 QVariant 을 반환하는 인덱스에는 호출되지 않습니다.

QAbstractItemModel::data()도 참조하세요 .

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

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

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

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

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

  • Tab
  • Backtab
  • Enter
  • Return
  • Esc

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

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

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

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

[virtual protected] void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const

인덱스 index 를 사용하여 option 를 값으로 초기화합니다. 이 방법은 하위 클래스에 QStyleOptionViewItem 이 필요하지만 모든 정보를 직접 채우고 싶지 않을 때 유용합니다.

QStyleOption::initFrom()도 참조하세요 .

QItemEditorFactory *QStyledItemDelegate::itemEditorFactory() const

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

setItemEditorFactory()도 참조하세요 .

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

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

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

이 함수는 뷰의 QStyle 를 사용하여 항목을 칠합니다.

서브클래스에서 페인트를 다시 구현할 때 사용합니다. initStyleOption ()를 사용하여 QStyledItemDelegate 와 같은 방식으로 option 을 설정합니다.

가능하면 페인트하는 동안 option 을 사용하세요. 특히 rect 변수를 사용하여 그릴 위치를 결정하고 state 변수를 사용하여 활성화 또는 선택 여부를 결정하세요.

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

QItemDelegate::paint(), QStyle::drawControl() 및 QStyle::CE_ItemViewItem참조하세요 .

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

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

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

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

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

void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)

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

itemEditorFactory()도 참조하세요 .

[override virtual] void QStyledItemDelegate::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 QStyledItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const

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

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

이 함수는 뷰의 QStyle 를 사용하여 항목의 크기를 결정합니다.

QStyle::sizeFromContents() 및 QStyle::CT_ItemViewItem참조하십시오 .

[override virtual] void QStyledItemDelegate::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.