Добрый день.
Есть у меня табличная модель, наследница QAbstractTableModel. Отображается через QTableView. Захотелось мне ещё сортировку сделать. Написал наследника QSortFilterProxyModel, подключил. Вызвал у QTableView setSortingEnabled - сортировка работает.
Но хочется мне, чтобы сортировку можно было включать и отключать. И вот тут какие-то непонятки. Вызываю у view setSortingEnabled(true) - сортировка сразу включилась, появились значки в заголовке, работают. Вызываю setSortingEnabled(false) - значки вроде бы пропали, но View по-прежнему показывает данные в отсортированном порядке.
Там надо ещё что-то вызвать?
Нет, есть ещё конечно, как минимум два «лобовых» варианта:
- при отключении сортировки просто выбрасывать прокси-модель и во view работать напрямую с оригиналом. При включении - восстанавливать цепочку. Но кажется мне, что это явно черезжопно по коду. Хотя тормоза на ненужную сортировку гарантированно исключает;
- чуть усложнить lessThan в прокси-модели, чтобы при отключённой сортировке оно просто работало как предок. Код компактнее, но во-первых, сортировка, хоть и вырожденная, всё равно будет дёргаться, а во-вторых меня не покидает ощущение, что должен быть какой-то бескостыльный вариант. А этот всё равно костыльный, хоть и не настолько, как первый...