@jkrieger

Добавление дополнительной строки строки при помощи QAbstractProxyModel?

Задача: отобразить в QListView некоторый список + 1 строку ("добавить новый элемент") с возможностью фильтрации элементов.

Текущее решение выглядит следующим образом:
QListItemModel -> QSortFilterProxyModel (фильтрация) -> MyQAbstractProxyModel (добавление витуальной строки) -> QListView

Код MyQAbstractProxyModel:
pastebin.com/BTdHyzQ8

В целом код даже работает, но с одним исключением. При клике на элементе QListView должен генерировать сигнал clicked(). Но он генерирует его не всегда, через раз как-то, закономерности не выявлено. Очевидно, что проблема в неправильном QModelIndex (в случае, если index.isValid() != True он и не должен генерировать сигнал).

Еще замечено, что есть артефакт отображения: при наведении мышки на элемент не происходит его выделение, как это происходит если QListView натравлен на другую модель.

Вопрос: Куда копать? Что неправильно?

P.S.:
Найден костыль, позволяющий обойти проблему - добавил еще одну QSortFilterProxyModel между MyQAbstractProxyModel и QListView, которая служит просто в качестве прокладки. Артефакты исчезли и сигнал clicked генерируется исправно. Но все равно интересно в чем могла быть проблема.

Также замечено, что если QListView натравлен на исходную QListItemModel, то проблема также имеет место.
  • Вопрос задан
  • 3043 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы