Название: [Решено]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 Спасибо, всё работает.
|