Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: vintik от Апрель 01, 2014, 16:02



Название: [РЕШЕНО] запрет сортировки при изменении QStandardItem (QSortFilterProxyModel)
Отправлено: vintik от Апрель 01, 2014, 16:02
Привет!

Проблема такая.
Есть класс унаследованный от QStandardItemModel (standard_table_model). У него есть метод set_bg_color(index, color);
В нём вызывается setBackground(color) для найденного по индексу QStandardItem
В кастомной вьюхе я использую этот класс в связке с QSortFilterProxyModel (устанавливаю её как source модель в проксю).
В результате, при вызове set_bg_color(index, color) и последующем setBackground происходит генерация сигнала itemChanged,
что приводит к вызову функции lessThan у QSortFilterProxyModel.

Можно ли как-то запретить вызов lessThan при изменении таких свойств айтемов, которые не влияют на порядок сортировки?


Название: Re: запрет сортировки при изменении QStandardItem (QSortFilterProxyModel)
Отправлено: GreatSnake от Апрель 02, 2014, 08:05
Если прокси используется только для сортировки, то лучше от неё отказаться совсем и
задейстровать механизм "прототипа элемента" (http://www.prog.org.ru/index.php?topic=23900.msg169527#msg169527).


Название: Re: запрет сортировки при изменении QStandardItem (QSortFilterProxyModel)
Отправлено: vintik от Апрель 02, 2014, 12:21
спасибо за ссылку, не знал про этот механизм!
Фильтрация, к сожалению, тоже нужна.

Как временное решение отключил
Код:
setDynamicSortFilter(false);

а где нужно принудительно вызывают sort