私は Qt を学習しており、QPainter を使用して自分のプログラムの簡単な表示を描画しようとしています。
静的要素 (フレームなど) を一度描画し、その後は動的要素のみを更新します。
ウィンドウがフォーカスを失った場合を除いて、すべて正常に動作します。それが発生するとすぐに、領域全体がクリアされます (動的要素は以前と同じようにペイントされ続けます)。
この動作を防ぐことは可能ですか? そうでない場合、ウィンドウがフォーカスを失ったかどうかを判断するにはどうすればよいですか?
ウィジェットが表示されると、paintEvent
メンバーが呼び出されます。渡されたイベントにはregion()
、ウィジェットのどの部分を再描画する必要があるかを示すメンバーがあります。必要に応じて、それを使用して静的部分を再描画できます。
画面が再描画された理由はわかりませんでしたが、次を使用してフォーカスをトリガーできます
eventFilter(QObject *, QEvent *event) {
if (event->type() == QEvent::ActivationChange){}
}
ペイント関数はここから呼び出すことができます。通常、ウィンドウがフォーカスを失う前にトリガーが起動するため、わずかな遅延を追加する必要があります (したがって、再描画はクリアされます)。