Spec-Zone.ru › Qt 5.11

Класс QAbstractItemDelegate

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

Заголовок: #include <QAbstractItemDelegate>
qmake: QT += widgets
Наследует: QObject
Наследуется от:

QItemDelegate и QStyledItemDelegate

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

Типы публичного доступа

перечисление EndEditHint { НетПодсказки, РедактироватьСледующийЭлемент, РедактироватьПредыдущийЭлемент, ОтправитьМодельКэш, ВернутьМодельКэш }

Функции публичного доступа

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
  • 34 функций публичного доступа, унаследованных от QObject

Сигналы

void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = НетПодсказки)
void commitData(QWidget *editor)
void sizeHintChanged(const QModelIndex &index)
  • 2 сигнала, унаследованных от QObject

Дополнительные унаследованные члены

  • 1 свойство, унаследованное от QObject
  • 1 открытый слот, унаследованный от QObject
  • 1 открытая переменная, унаследованная от QObject
  • 10 статических открытых членов, унаследованных от QObject
  • 9 защищенных функций, унаследованных от QObject
  • 2 защищенных переменных, унаследованных от QObject

Подробное описание

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

Класс QAbstractItemDelegate предоставляет интерфейс и общие функции для делегатов в архитектуре модель/вид. Делегат отображает отдельные элементы в представлениях и обрабатывает редактирование данных модели.

Класс QAbstractItemDelegate — один из классов модели/представления и является частью фреймворка модель/вид Qt.

Чтобы настроить отрисовку элемента, необходимо реализовать paint() и sizeHint(). Класс QItemDelegate предоставляет реализацию по умолчанию для этих функций; если вам не нужна настройка отрисовки, следует вместо этого унаследовать от этого класса.

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

Мы создаем класс 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().

См. также Модель/Представление, QItemDelegate, Пример 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.

[virtual] QAbstractItemDelegate::~QAbstractItemDelegate()

Удаляет абстрактный делегат элемента.

[signal] void QAbstractItemDelegate::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint)

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

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

См. также EndEditHint.

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

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

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

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

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

Возвращаемый виджет редактора должен иметь Qt::StrongFocus; в противном случае, события QMouseEvent, полученные виджетом, будут распространяться на представление. Фон представления будет просвечивать, если редактор не нарисует свой собственный фон (например, с помощью setAutoFillBackground()).

См. также destroyEditor(), setModelData() и setEditorData().

[virtual] 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)

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

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

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

[virtual] bool QAbstractItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index)

Всякий раз, когда происходит событие справки, эта функция вызывается со событием event, представлением view, параметрами option и индексом index, соответствующим элементу, где произошло событие.

Возвращает true если делегат может обработать событие; в противном случае возвращает false. Значение true указывает, что данные, полученные с помощью индекса, имели необходимую роль.

Для событий QEvent::ToolTip и QEvent::WhatsThis, которые были успешно обработаны, соответствующее всплывающее окно может быть показано в зависимости от конфигурации системы пользователя.

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

См. также QHelpEvent.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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