QItemDelegate Class
QItemDelegate 클래스는 모델의 데이터 항목에 대한 표시 및 편집 기능을 제공합니다. 더 보기...
| 헤더: | #include <QItemDelegate> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 상속: | QAbstractItemDelegate |
속성
- clipping : bool
공개 함수
| 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 *object, 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()를 재구현하는 것이 있습니다. 이 과정은 모델/뷰 프로그래밍 개요 문서에 설명되어 있습니다.
QStyledItemDelegate 대 QItemDelegate
Qt 4.4부터는 QItemDelegate와 QStyledItemDelegate 라는 두 가지 델리게이트 클래스가 있습니다. 그러나 기본 델리게이트는 QStyledItemDelegate 입니다. 이 두 클래스는 뷰 내 항목의 그리기 및 편집기 제공을 위한 독립적인 대안입니다. 이 둘의 차이점은 QStyledItemDelegate 가 현재 스타일을 사용하여 항목을 그리는 데 있습니다. 따라서 사용자 정의 델리게이트를 구현하거나 Qt 스타일시트를 다룰 때는 QStyledItemDelegate 를 기본 클래스로 사용할 것을 권장합니다. 사용자 정의 델리게이트가 그리기 위해 스타일을 사용해야 하는 경우가 아니라면, 두 클래스에 필요한 코드는 동일해야 합니다.
‘Delegate Classes’, ‘ QStyledItemDelegate ’, ‘ QAbstractItemDelegate’도 참조하십시오 .
속성 문서
clipping : bool
델리게이트가 페인트 이벤트를 잘라내야 하는지 여부
이 속성은 페인트 영역을 항목의 크기로 제한합니다. 기본값은 'on'입니다. 이미지가 항목의 크기보다 큰 경우 등에 유용합니다.
액세스 함수:
| 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 *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const를 재구현합니다.
index 로 지정된 항목을 편집하는 데 사용되는 위젯을 반환합니다. parent 위젯과 option 스타일은 편집기 위젯의 표시 방식을 제어하는 데 사용됩니다.
QAbstractItemDelegate::createEditor()도 참조하십시오 .
[protected] void QItemDelegate::drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
지정된 ` index`에 대해, ` painter ` 및 ` option` 스타일을 사용하여 항목 배경을 렌더링합니다.
[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
지정된 rect 내의 직사각형 영역에, 주어진 painter 및 스타일 option 을 사용하여 pixmap 장식을 렌더링합니다.
[virtual protected] void QItemDelegate::drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const
rect 로 지정된 사각형 영역 내에서, 주어진 painter 및 스타일 option 을 사용하여 항목 뷰 text 를 렌더링합니다.
[virtual protected] void QItemDelegate::drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const
rect 로 지정된 사각형 내의 영역을, 주어진 painter 및 스타일 option 을 사용하여 렌더링하며, 해당 영역에 포커스가 있음을 나타냅니다.
[override virtual protected] bool QItemDelegate::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 QItemDelegate::eventFilter(QObject *object, QEvent *event)
다음 함수를 재구현합니다: QObject::eventFilter(QObject *watched, QEvent *event).
자세한 내용은 QAbstractItemDelegate::handleEditorEvent()을 참조하십시오.
QItemEditorFactory *QItemDelegate::itemEditorFactory() const
항목 델리게이트에서 사용하는 에디터 팩토리를 반환합니다. 에디터 팩토리가 설정되어 있지 않으면 이 함수는 null을 반환합니다.
setItemEditorFactory()도 참조하십시오 .
[override virtual] void QItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
QAbstractItemDelegate::paint(QPainter *painter, 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를 재구현합니다.
model index 로 지정된 데이터 모델 항목에서 editor 가 표시하고 편집할 데이터를 설정합니다.
기본 구현은 데이터를 editor 위젯의 user 속성에 저장합니다.
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 위젯의 user 속성에서 데이터 모델에 저장할 값을 가져옵니다.
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 *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.