質問

私は何が起こるのかっ呼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)チェックを欠い

編集

QUpdateLaterEventQt::NormalEventPriorityイベントとして掲載されているので、それが他のすべての通常の優先度のイベント(src/corelib/kernel/qcoreapplication.cpp:971:1003を参照)の後に処理されます。あなたはまた、compressEventコードに見たいと思うかもしれません、私はそれをチェックしていません。

だから、最終的には、質問に答えるために:QUpdateLaterEventは、それが投稿されました前にキューにあった他の高と通常の優先度のイベントの後に処理されます。

他のヒント

行動が文書化されていません== Qtのバージョン間の同じ滞在する保証はありません。あなたは他のイベントに対するペイントイベントの順序に依存したコードを書くべきではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top