QStyledItemDelegate Class
QStyledItemDelegate 클래스는 모델의 데이터 항목에 대한 표시 및 편집 기능을 제공합니다. 더 보기...
| 헤더: | #include <QStyledItemDelegate> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 상속: | QAbstractItemDelegate |
| 상속받는 클래스: |
공개 함수
| 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 *object, QEvent *event) override |
상세 설명
Qt 항목 뷰(예: ` QTableView`)에서 모델의 데이터를 표시할 때, 개별 항목은 델리게이트에 의해 그려집니다. 또한, 항목을 편집할 때 편집기 위젯이 제공되며, 이 위젯은 편집이 진행되는 동안 항목 뷰 위에 배치됩니다. QStyledItemDelegate는 모든 Qt 항목 뷰에 대한 기본 델리게이트이며, 항목 뷰가 생성될 때 해당 뷰에 설치됩니다.
QStyledItemDelegate 클래스는 모델/뷰(Model/View) 클래스 중 하나이며, 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()는 업데이트된 데이터를 모델에 반환합니다.
Star Delegate 예제는 이러한 메서드를 재구현하여 편집기를 생성합니다.
QStyledItemDelegate 대 QItemDelegate
Qt 4.4부터는 QItemDelegate 와 QStyledItemDelegate라는 두 가지 델리게이트 클래스가 있습니다. 그러나 기본 델리게이트는 QStyledItemDelegate입니다. 이 두 클래스는 뷰 내 항목의 렌더링 및 편집기 제공을 위한 서로 독립적인 대안입니다. 두 클래스의 차이점은 QStyledItemDelegate가 현재 스타일을 사용하여 항목을 그리는 데 있습니다. 따라서 사용자 정의 델리게이트를 구현하거나 Qt 스타일 시트를 다룰 때는 QStyledItemDelegate를 기본 클래스로 사용하는 것이 좋습니다. 사용자 정의 델리게이트가 그리기 위해 스타일을 사용해야 하는 경우가 아니라면, 두 클래스에 필요한 코드는 동일해야 합니다.
항목 뷰의 그리기 방식을 사용자 정의하려면 사용자 정의 스타일을 구현해야 합니다. 자세한 내용은 QStyle 클래스 문서를 참조하십시오.
관련 항목: 델리게이트 클래스, QItemDelegate, QAbstractItemDelegate, QStyle 및 Star 델리게이트 예제.
멤버 함수 문서
[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 *parent, const QStyleOptionViewItem &option, const QModelIndex &index) 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 `를 사용하여 ` value `을 ` QString`로 변환합니다.
이 함수는 빈 모델 인덱스, 즉 모델이 유효하지 않은 QVariant 를 반환하는 인덱스의 경우에는 호출되지 않습니다.
QAbstractItemModel::data()도 참조하십시오 .
[override virtual protected] bool QStyledItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
QAbstractItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)를 재구현합니다.
[override virtual protected] bool QStyledItemDelegate::eventFilter(QObject *object, QEvent *event)
QObject::eventFilter(QObject *watched, QEvent *event)를 재구현합니다.
자세한 내용은 QAbstractItemDelegate::handleEditorEvent()을 참조하십시오.
[virtual protected] void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const
option index 를 인덱스를 사용하여 값으로 초기화합니다. 이 메서드는 하위 클래스에서 가 필요하지만, 모든 정보를 직접 입력하고 싶지 않을 때 유용합니다. 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 을 사용하여 항목을 그립니다.
서브클래스에서 paint를 재구현할 때는 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를 재구현합니다.
model index 로 지정된 데이터 모델 항목에서 editor 가 표시하고 편집할 데이터를 설정합니다.
기본 구현은 데이터를 editor 위젯의 user 속성에 저장합니다.
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 위젯의 user 속성에서 데이터 모델에 저장될 값을 가져옵니다.
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 *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const를 재구현합니다.
index 로 지정된 항목에 대해, 주어진 스타일 option 에 따라 editor 를 업데이트합니다.
© 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.