Шаг 156.
Библиотека PyQt5.
Списки и таблицы. Использование делегатов

    На этом шаге мы рассмотрим назначение делегатов и классы, их реализующие.

    Все три представления, перечисленные на 145 шаге, дают возможность редактирования текста их элементов. Например, в таблице (класс QTableView) мы можем дважды щелкнуть мышью на любом элементе, после чего в нем появится поле ввода. Введем в это поле новый текст и нажмем клавишу Enter для подтверждения ввода или Esc - для отмены.

    За редактирование данных в представлении отвечает особый класс, называемый делегатом. Он создает компонент, в котором будет выполняться редактирование значения (редактор), задает его параметры, заносит в него само редактируемое значение, а по окончании редактирования переносит его назад, в модель.

    По умолчанию в качестве делегата используется класс QItemDelegate из модуля QtWidgets. А в качестве компонента-редактора применяется однострочное поле ввода (класс QLineEdit, рассмотренный нами на 103 шаге.

    Если мы хотим использовать для редактирования значения в каком-либо столбце или строке другой редактор,- например, многострочное поле ввода, поле ввода даты или целого числа, мы создадим другой делегат и назначим его представлению. Класс, представляющий делегат, должен быть унаследован от класса QStyledItemDelegate.

    Иерархия наследования классов QItemDelegate и QStyledItemDelegate:

  QObject - QAbstractItemDelegate - QItemDelegate 
  QObject - QAbstractItemDelegate - QStyledItemDelegate

    В новом классе-делегате нам следует переопределить следующие методы;

    Полное описание класса QAbstractItemDeiegate можно найти на странице https://doc.qt.io/qt-5/qabstractitemdelegate.html - на странице https://doc.qt.io/qt-5/qitemdelegate.html, а класса QStyledItemDelegate - на странице https://doc.qt.io/qt-5/qstyleditemdelegate.html.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг