Вам не пришлось бы мутить с отложенными событиями, которые куда-то там "прорываются".
Если я хочу (а я хочу) отложить обновление
модели (а не вью) - все то же самое. В Qt есть нечто подобное (метод IsChanging, в букварь не вошел), но используется только для пресечения сортировки.
Ну а по сабжу - update() не вызывает перерисовку, а кладёт запрос на неё в очередь, т.е. paintEvent() и update() - вещи разные.
Предлагаю считать собеседников достаточно грамотными
Можно попробовать отловить, откуда идёт paintEvent()
Из QEvent::UpdateRequest которое засылается тем самым update(). Перед вызовом paint вью апдейтит айтемы опираясь, однако, на модель - она должна быть валидна.
Место где пропускается засылка UpdateRequest я конечно давно нашел
C++ (Qt)
void QWidgetBackingStore::markDirty(const QRect &rect, QWidget *widget,
UpdateTime updateTime, BufferState bufferState)
....
const QRect translatedRect(widgetRect.translated(widget->mapTo(tlw, QPoint())));
if (qt_region_strictContains(dirty, translatedRect)) {
if (updateTime == UpdateNow) // сюда заходит, но updateTime == UpdateLater
sendUpdateRequest(tlw, updateTime); // не выполняется
return; // Already dirty
}
Вероятно буги-вуги. Кто-то маркировал dirty но UpdateRequest или не был послан или не имел эффекта, т.к. setUpdatesEnabled стояло в false. А данный код понадеялся на это и тоже запрос не послал. И шо делать?