Spec-Zone.ru › Qt 5.9

Класс QAbstractItemDelegate

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

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

QItemDelegate и QStyledItemDelegate

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

Типы

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

Открытые функции

QAbstractItemDelegate(QObject *parent = Q_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
  • 32 открытые функции, унаследованные от QObject

Сигналы

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

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

  • 1 свойство, унаследованное от QObject
  • 1 открытый слот, унаследованный от QObject
  • 11 статические открытые члены, унаследованные от QObject
  • 9 защищённые функции, унаследованные от 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 = Q_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/qt-5.9/qabstractitemdelegate.html

Spec-Zone.ru

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