Задача: отобразить в 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, то проблема также имеет место.