Не могу осилить концепцию моделей и индексов в моделях (несмотря на это пишу софт, использующий те и другие, хыхы).
Вот пример. Есть окно, в нем виджет QTableView выводящий содержимое какой-нить таблички базы данных (не принципиально).
Данные в базе могут менятся из других источников. Для слежения за этим у меня есть фоновый процесс, получающий команды от координатора или просто обновляющий данные по таймеру. Когда данные обновились, я их скармливаю в мою модель (потомок QAbstractTableModel).
В своей модели я реализовал методы headerData(), rowCount(), columnCount(), data().
В data() я выкодовываю из modelIndex его row и column, что бы знать, какое значение выводить в ячейке.
Пока данные не меняются - все работает отлично.
Дальше начинается интересное.
Допустим, курсор стоял на второй строке, а первая удалилась. Я предполагаю, что чтобы виджет это знал, модел-индекс у выделенной ячейки должен поменяться. Вопрос - как? При обновлении данных я шлю наверх сигнал layoutChanged() и dataChanged(). Виджет перерисовывает содержимое нормально (т.е. реализованных методов хватает), но текущее выделение меняется (но методов не достаточно) - курсор остается во второй строке, хотя должен бы был перепрыгнуть на первую.
Тут начинаются глупые вопросы.
Кто ответственен за генерацию modelIndex'ов? Я или модель? Надо их генерить при каждом обновлении данных или как?
Из документации я понял, что modelIndex - это внутримодельное представление данных, т.е. каждой ячейке моей таблицы я должен сопоставить уникальный modelIndex. Как их генерировать и где? Тут начинается ступор.
P.S. Пишу на PyQt, так что приветствуются примеры на нём.
P.P.S. Какой-то среднепоследний стейбл, 4.7 примерно.