При реализации множественного удаления наткнулись на некоторые странности:
1) Событие смены текущего приходит не по окончанию удаления а во время оповещения о начале удаления
2) При оповещении о начале удаления QSortFilterProxyModel выкидывает сразу и событие об окончании изменений.
Мы, конечно, блакируем интерфейс во время изменений (setUpdatesEnabled(false)), но вот на событие смены текущего иногда завязано довольно много действий.
И очень неудачно, когда текущим становится элемент, которого уже нет...
Кто-нибудь натыкался на подобное?
Какие идеи как обойти?
Собственно псевдо-код отработки удаления в модели (python):
def _inner_data_dels(self, oids):
u"""
Обработка удаления объектов.
@param oids идентификаторы удалённых объектов
"""
#{0}
#Находим номера всех удаляемых строк
rows = set(
row for row in (self._indexByOid(oid) for oid in oids)
if row is not None)
#{1}
#Оповещаем о том, что указанные строки сейчас будут удалены
for row in sorted(rows):
self.beginRemoveRows(QtCore.QModelIndex(), row, row)
#{2}
#Удаляем
for row in sorted(rows, reverse=True):
del self.objects[row]
#{3}
#Оповещаем о том, что удаление закончилось
for row in rows:
self.endRemoveRows()
Описанные "странности" происходят в строках между {1} и {2}.