PyQt5: QSortFilterProxyModel заставляет заголовок табличного представления сбрасывать его режим изменения размера раздела - PullRequest
0 голосов
/ 07 мая 2018

У меня есть табличное представление с видимым заголовком. Чтобы использовать возможности сортировки, я использую QSortFilterProxyModel в качестве модели оболочки. Я также хочу, чтобы заголовок таблицы растягивался до ширины таблицы:

 horizontal_header.setSectionResizeMode(QtWidgets.QHeaderView.Stretch)

И это работает, пока я не нажму на любой из столбцов (чтобы отсортировать элементы). После этого заголовок сжимается до размера по умолчанию. ОДНАКО, если я добавлю строку в таблицу ПЕРЕД нажатием на заголовок, размер заголовков останется неизменным. Итак, вот контрольный пример проблемы:

  1. Таблица инициализирована с растянутым заголовком

  2. Нажмите на заголовок, чтобы отсортировать вещи

  3. Сжатие заголовка

СК2:

  1. Таблица инициализирована с растянутым заголовком
  2. Добавить строку в таблицу
  3. Нажмите на заголовок для сортировки
  4. Заголовок не сжимается.

ПРИМЕЧАНИЕ. Этого не произойдет, если я не использую QSortFilterProxyModel

1 Ответ

0 голосов
/ 07 мая 2018

Я знаю, что я не опубликовал минимальный пример для этого, но для всех, кто понял мою проблему и столкнулся с той же проблемой, вот как мне удалось это исправить: Просто создайте подкласс QSortFilterProxyModel и переопределите метод sort ():

class MySortModel(QSortFilterProxyModel):
    def sort(self, *args, **kwargs):
        # check that there is no data to sort, if so - do not sort
        if self.sourceModel().rowCount(QModelIndex()) > 0:
            super().sort(*args, **kwargs)

Идея состоит в том, чтобы отключить сортировку, если в модели нет элементов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...