Spec-Zone.ru › Qt 5.12

Класс 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
  • 31 открытая функция унаследована от QObject

Сигналы

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

Статические открытые члены

const QMetaObject staticMetaObject
  • 9 статических открытых членов унаследованы от QObject

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

  • 1 свойство унаследовано от QObject
  • 1 открытый слот унаследован от 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 = 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.

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

Возвращаемый виджет редактора должен иметь 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.12/qabstractitemdelegate.html

Spec-Zone.ru

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