src/gui/kernel/qwidget.cpp:9544
QWidget::update() ソース コードを確認した後、次のメソッドを呼び出していることがわかりました。
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)
チェックがありません。
編集
はイベントQUpdateLaterEvent
としてポストされるQt::NormalEventPriority
ため、他のすべての通常優先度イベントの後に処理されます (src/corelib/kernel/qcoreapplication.cpp:971
およびを参照:1003
)。また、compressEventコードを調べたいと思うかもしれませんが、私はそれをチェックしていません。
最終的に質問に答えるために: QUpdateLaterEvent は、ポストされる前にキューにあった他の優先度の高いイベントと通常のイベントの後に処理されます。