Qtウィジェットの更新がるのもよいでしょう。
-
19-09-2019 - |
質問
私は何が起こるのかっ呼QWidgetのupdate()メソッドがあります。
こちらは、ドキュメンテーション
http://doc.qt.digia.com/4.5/qwidget.html#update
この機能を利用できませんの原因に 当面の塗り替え;代わりに で 日程、塗料イベント のための処理 時Qtのメインイベント ループを実行します。この許可Qtの最適化 より速やちらつきをよ 呼び出repaint()。
から見るQtソースコードがQUpdateLaterEventが作成され、ポスト型 QEvent::UpdateLater
この文書記録の一部 http://doc.qt.digia.com/4.5/qevent.html
QEvent::UpdateLater:ウィジェットの すべキューを塗り替えられる 空間に変換するようにします。
うさせた後の時間"を意味するのか。
私のすべてのemited信号待ちのイベントのイベントキュー処理、塗料なのでしょうか?
おかげさ
ガボール
解決
を確認した後はQWidget ::更新()私が見つけたソースコードは、それが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);
}
}
あなたはupdate()がすでにpaintEvent()メソッドの内部から呼び出された場合。
QUpdateLaterEvent
のみが掲載されて見ることができるように
また、ライン9456上のQWidget::repaint(const QRect &rect)
ソースを確認することができます - それはtestAttribute(Qt::WA_WState_InPaintEvent)
チェックを欠い
編集
QUpdateLaterEvent
はQt::NormalEventPriority
イベントとして掲載されているので、それが他のすべての通常の優先度のイベント(src/corelib/kernel/qcoreapplication.cpp:971
と:1003
を参照)の後に処理されます。あなたはまた、compressEventコードに見たいと思うかもしれません、私はそれをチェックしていません。
だから、最終的には、質問に答えるために:QUpdateLaterEventは、それが投稿されました前にキューにあった他の高と通常の優先度のイベントの後に処理されます。
。他のヒント
行動が文書化されていません== Qtのバージョン間の同じ滞在する保証はありません。あなたは他のイベントに対するペイントイベントの順序に依存したコードを書くべきではありません。