Spec-Zone.ru › Qt 6.1

Класс QAbstractItemDelegate

Класс QAbstractItemDelegate используется для отображения и редактирования элементов данных из модели. Подробнее...

Заголовок: #include <QAbstractItemDelegate>
CMake: find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Наследует: QObject
Наследуется от:

QItemDelegate и QStyledItemDelegate

  • Список всех членов, включая унаследованные

Типы

перечисление EndEditHint { NoHint, EditNextItem, EditPreviousItem, SubmitModelCache, RevertModelCache }

Общедоступные функции

QAbstractItemDelegate(QObject *parent = nullptr)
виртуальный ~QAbstractItemDelegate()
виртуальный QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
виртуальный void destroyEditor(QWidget *editor, const QModelIndex &index) const
виртуальный bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
виртуальный bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index)
виртуальный void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const = 0
виртуальный void setEditorData(QWidget *editor, const QModelIndex &index) const
виртуальный void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
виртуальный QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const = 0
виртуальный 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 предоставляет стандартные реализации этих функций; если вам не нужен пользовательский вид, наследуйте от этого класса вместо него.

Мы приводим пример рисования полосы прогресса в элементах; в нашем случае для программы управления пакетами.

Мы создаем класс WidgetDelegate, который наследуется от QStyledItemDelegate. Мы выполняем рисование в функции 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, Пример Pixelator, QStyledItemDelegate и QStyle.

Документация типов членов

перечисление QAbstractItemDelegate::EndEditHint

Это перечисление описывает различные подсказки, которые делегат может предоставить компонентам модели и представления, чтобы сделать редактирование данных в модели удобным для пользователя.

Постоянная Значение Описание
QAbstractItemDelegate::NoHint 0 Нет рекомендуемых действий.

Эти подсказки позволяют делегату влиять на поведение представления:

Постоянная Значение Описание
QAbstractItemDelegate::EditNextItem 1 Представление должно использовать делегат для открытия редактора на следующем элементе в представлении.
QAbstractItemDelegate::EditPreviousItem 2 Представление должно использовать делегат для открытия редактора на предыдущем элементе в представлении.

Обратите внимание, что пользовательские представления могут интерпретировать понятия «следующий» и «предыдущий» по-разному.

Следующие подсказки наиболее полезны при использовании моделей, которые кэшируют данные, например, тех, которые манипулируют данными локально, чтобы повысить производительность или сохранить пропускную способность сети.

Постоянная Значение Описание
QAbstractItemDelegate::SubmitModelCache 3 Если модель кэширует данные, она должна записать кэшированные данные в исходное хранилище данных.
QAbstractItemDelegate::RevertModelCache 4 Если модель кэширует данные, она должна сбросить кэшированные данные и заменить их данными из исходного хранилища данных.

Хотя модели и представления должны реагировать на эти подсказки соответствующим образом, пользовательские компоненты могут игнорировать любые или все из них, если они не имеют значения.

Документация функций членов

QAbstractItemDelegate::QAbstractItemDelegate(QObject *parent = nullptr)

Создает новый делегат абстрактного элемента с указанным parent.

Закрыть редакторvoid QAbstractItemDelegate::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint)

Этот сигнал испускается, когда пользователь закончил редактирование элемента с помощью указанного editor.

hint предоставляет способ для делегата повлиять на поведение модели и представления после завершения редактирования. Он указывает этим компонентам, какое действие должно быть выполнено далее, чтобы обеспечить комфортный опыт редактирования для пользователя. Например, если указано EditNextItem, представление должно использовать делегат для открытия редактора на следующем элементе в модели.

См. также EndEditHint.

[signal] void QAbstractItemDelegate::commitData(QWidget *editor)

Этот сигнал должен быть выпущен, когда виджет editor завершил редактирование данных и хочет записать их обратно в модель.

[signal] void QAbstractItemDelegate::sizeHintChanged(const QModelIndex &index)

Этот сигнал должен быть выпущен, когда sizeHint() для index изменился.

Представления автоматически подключаются к этому сигналу и переупорядочивают элементы по мере необходимости.

[virtual] QAbstractItemDelegate::~QAbstractItemDelegate()

Уничтожает делегат абстрактного элемента.

[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, since 5.0] void QAbstractItemDelegate::destroyEditor(QWidget *editor, const QModelIndex &index) const

Вызывается, когда редактор editor больше не нужен для редактирования элемента данных с заданным index и должен быть уничтожен. Стандартное поведение — вызов deleteLater для редактора. Возможно, например, избежать этого удаления, переопределив эту функцию.

Эта функция была добавлена в Qt 5.0.

См. также createEditor().

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

Когда начинается редактирование элемента, эта функция вызывается с событием, которое вызвало редактирование, моделью, индексом элемента и параметрами, используемыми для отображения элемента.

События мыши отправляются в editorEvent() даже если они не запускают редактирование элемента. Это может, например, быть полезно, если вы хотите открыть контекстное меню при нажатии правой кнопкой мыши на элементе.

Базовая реализация возвращает false (указывая, что она не обработала событие).

[virtual] bool QAbstractItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &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 для отображения элемента, указанного индексом элемента.

Если вы переопределяете эту функцию, вы также должны переопределить sizeHint().

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

Устанавливает содержимое заданного editor на данные для элемента в заданном индексе. Обратите внимание, что индекс содержит информацию о используемой модели.

Базовая реализация ничего не делает. Если вам требуется настраиваемое редактирование, вам необходимо переопределить эту функцию.

См. также setModelData().

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

Устанавливает данные для элемента в заданном индексе в модели на содержимое заданного editor.

Базовая реализация ничего не делает. Если вам требуется настраиваемое редактирование, вам необходимо переопределить эту функцию.

См. также setEditorData().

[pure virtual] QSize QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const

Эта чистая абстрактная функция должна быть переопределена, если вы хотите обеспечить настраиваемое отображение. Параметры задаются параметром option, а элемент модели — параметром index.

Если вы переопределяете эту функцию, вы также должны переопределить paint().

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

Обновляет геометрию editor для элемента с заданным индексом в соответствии с прямоугольником, указанным в option. Если у элемента есть внутреннее расположение, редактор будет выстроен соответствующим образом. Обратите внимание, что индекс содержит информацию о используемой модели.

Базовая реализация ничего не делает. Если вам требуется настраиваемое редактирование, вы должны переопределить эту функцию.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qabstractitemdelegate.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API