После проверки исходного кода QWidget :: update () я обнаружил, что он вызывает этот метод в src/gui/kernel/qwidget.cpp:9544
:
void QWidget::update(const QRect &rect)
{
if (!isVisible() || !updatesEnabled() || rect.isEmpty())
return;
if (testAttribute(Qt::WA_WState_InPaintEvent)) {
QApplication::postEvent(this, new QUpdateLaterEvent(rect));
return;
}
if (hasBackingStoreSupport()) {
QTLWExtra *tlwExtra = window()->d_func()->maybeTopData();
if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore)
tlwExtra->backingStore->markDirty(rect, this);
} else {
d_func()->repaint_sys(rect);
}
}
Как видите, QUpdateLaterEvent
публикуется, только если update () уже вызывается из метода paintEvent ().
Вы также можете проверить QWidget::repaint(const QRect &rect)
источник в строке 9456 - в нем отсутствует testAttribute(Qt::WA_WState_InPaintEvent)
проверка.
EDIT
QUpdateLaterEvent
публикуется как событие Qt::NormalEventPriority
, поэтому оно обрабатывается после всех других событий с обычным приоритетом (см. src/corelib/kernel/qcoreapplication.cpp:971
и :1003
). Возможно, вы захотите взглянуть на код compressEvent, я этого не проверял.
Итак, чтобы окончательно ответить на вопрос: QUpdateLaterEvent обрабатывается после других событий с высоким и нормальным приоритетом, которые были в очереди до его публикации.