Russian Qt Forum

Qt => Model-View (MV) => Тема начата: DarkHobbit от Июль 06, 2021, 20:14



Название: [Решено]QTableView/QSortFilterProxyModel: программное задание столбца сортировки
Отправлено: DarkHobbit от Июль 06, 2021, 20:14
Добрый день.
Есть QTableView, который ссылается на QSortFilterProxyModel, а та - на мою модель.
Сортировка работает, теперь захотелось запоминать выбранный пользователем столбец для сортировки и при следующем запуске программы активировать именно его.
У QTableView есть sortByColumn(). У QSortFilterProxyModel - sort() с теми же параметрами.
Если я вызываю QSortFilterProxyModel::sort(), сортировка по указанному столбцу происходит... но треугольничек в заголовке указывает не на него, а на первый столбец.
QTableView::sortByColumn() отрабатывает более логично.
Зато когда я извлекаю номер столбца, по которому сортировал сам пользователь, надо дёргать именно QSortFilterProxyModel::sortColumn(). У view я подобного метода не нашёл.
Всё вроде бы работает, но как-то это несимметрично и нелогично. Или я что-то не догнал?

Проверено на нескольких версиях Qt, последняя - 5.15.2.


Название: Re: QTableView/QSortFilterProxyModel: программное задание столбца сортировки
Отправлено: PimenS от Июль 07, 2021, 03:46
Можно использовать void QHeaderView::setSortIndicator(int logicalIndex, Qt::SortOrder order).
Сохранять настройки можно по [signal] void QHeaderView::sortIndicatorChanged(int logicalIndex, Qt::SortOrder order).


Название: Re: QTableView/QSortFilterProxyModel: программное задание столбца сортировки
Отправлено: DarkHobbit от Июль 07, 2021, 10:25
Можно использовать void QHeaderView::setSortIndicator(int logicalIndex, Qt::SortOrder order).
Ещё и третий объект добавляется, отлично :))) Но он, как я понимаю, только индикацию включает, саму сортировку не меняет? Т.е. использовать его надо в паре с QSortFilterProxyModel::sort()?
Цитировать
Сохранять настройки можно по [signal] void QHeaderView::sortIndicatorChanged(int logicalIndex, Qt::SortOrder order).
А вот это ценное замечание. Я планировал сохранять настройки в обработчике closeEvent, извлекая информацию из QSortFilterProxyModel::sortColumn() и sortOrder(), но раз есть такой сигнал - логичнее использовать его, да.


Название: Re: QTableView/QSortFilterProxyModel: программное задание столбца сортировки
Отправлено: PimenS от Июль 07, 2021, 14:30
Но он, как я понимаю, только индикацию включает, саму сортировку не меняет?

У меня меняет. Главное включить void QTableView::setSortingEnabled(bool enable)

void QTableView::sortByColumn(int column, Qt::SortOrder order) использую только в представлениях где не нужно сохранять настройки сортировки.


Название: Re: QTableView/QSortFilterProxyModel: программное задание столбца сортировки
Отправлено: DarkHobbit от Июль 08, 2021, 00:43
Спасибо. Единственное, что пока не понял из справки - logicalIndex это то же самое, что column в других методах? Эксперименты показывают, что вроде как да...


Название: Re: QTableView/QSortFilterProxyModel: программное задание столбца сортировки
Отправлено: PimenS от Июль 08, 2021, 12:54
logicalIndex это то же самое, что column в других методах?

Мне всегда казалось, что это одно и тоже.


Название: Re: [Решено]QTableView/QSortFilterProxyModel: программное задание столбца сортировки
Отправлено: DarkHobbit от Июль 14, 2021, 20:35
Спасибо, всё работает.