Шаг 155.
Библиотека PyQt5.
Списки и таблицы. Промежуточные модели
На этом шаге мы рассмотрим назначение, формат конструктора и основные методы класса QSortFilterProxyModel.
Как вы уже знаете, одну модель можно установить в нескольких представлениях. При этом изменение порядка следования элементов в одном представлении повлечет за собой изменение порядка
следования элементов в другом. Чтобы предотвратить изменение порядка следования элементов в базовой модели, следует создать промежуточную модель с помощью класса QSortFilterProxyModel,
объявленного в модуле QtCore, и установить ее в представлении. Иерархия наследования для класса QSortFilterProxyModel выглядит так:
QObject - QAbstractItemModel - QAbstractProxyModel -
QSortFilterProxyModel
Формат конструктора класса QSortFilterProxyModel:
<Объект> = QSortFilterProxyModel ([parent=<Родитель>])
Класс QSortFilterProxyModel наследует следующие методы из класса QAbstractProxyModel (здесь приведены только основные - полный их список доступен на странице
https://doc.qt.io/qt-5/qabstractproxymodel.html):
- setSourceModel (<Модель>) - устанавливает базовую модель;
- sourceModel () - возвращает ссылку на базовую модель.
Класс QSortFilterProxyModel поддерживает основные методы обычных моделей и дополнительно определяет следующие основные методы (полный их список можно найти на странице
https://doc.qt.io/qt-5/qsortfilterproxymodel.html):
- sort (<Индекс столбца>, order=AscendingOrder]) - производит сортировку. Если во втором параметре указан атрибут AscendingOrder класса QtCore.Qt, сортировка производится в прямом порядке, а если
DescendingOrder - в обратном. Если в параметре <Индекс столбца> указать значение -1, то будет использован порядок следования элементов из базовой модели.
Примечание.
Чтобы включить сортировку столбцов пользователем, следует передать значение True в метод setSortingEnabled() объекта представления.
- setSortRole (<Poль>) - задает роль (см. 137 шаг), по которой производится сортировка. По умолчанию сортировка производится по роли DisplayRole;
- setSortCaseSensitivity (<Режим>) - если в качестве параметра указать атрибут CaseInsensitive класса QtCore.Qt, при сортировке регистр символов учитываться не будет, а если caseSensitive - то будет;
- setSortLocaleAware (<Флаг>) - если в качестве параметра указать значение True, то при сортировке будут учитываться настройки локали;
- setFilterFixedString (<Фрагмент>) - выбор из модели элементов, которые содержат заданный фрагмент. Если указать пустую строку, то в результат попадут все строки из базовой модели. Метод является слотом;
- setFilterRegExp () - выбор из модели элементов, соответствующих указанному регулярному выражению. Если указать пустую строку, то в результат попадут все строки из базовой модели. Форматы метода:
setFilterRegExp(<QRegExp>)
setFilterRegExp(<Строка с шаблоном>)
В первом формате указывается экземпляр класса QRegExp, а во втором - строка с шаблоном регулярного выражения. Второй формат метода является слотом;
- setFilterWildcard (<Шаблон>) - выбор из модели элементов, соответствующих указанной строке, которая может содержать подстановочные знаки:
- ? - один любой символ;
- * - нуль или более любых символов;
- [...] - диапазон значений.
Остальные символы трактуются как есть. Если в качестве параметра указать пустую строку, то в результат попадут все элементы из базовой модели. Метод является слотом;
- setFilterKeyColumn (<Индекс>) - задает индекс столбца, по которому будет производиться фильтрация. Если в качестве параметра указать значение -1, то будут просматриваться элементы во всех столбцах. По умолчанию фильтрация производится по первому столбцу;
- setFilterRole (<Poль>) - задает роль (см. 137 шаг), по которой производится фильтрация. По умолчанию сортировка производится по роли DisplayRole;
- setFilterCaseSensitivity (<Режим>) - если в качестве параметра указать атрибут CaseInsensitive класса QtCore.Qt, при фильтрации регистр символов учитываться не будет, а если caseSensitive - то будет;
- setDynamicSortFilter (<Флаг>) - если в качестве параметра указано значение False, то при изменении базовой модели не будет производиться повторная сортировка или фильтрация.
На следующем шаге мы рассмотрим использование делегатов.
Предыдущий шаг
Содержание
Следующий шаг