2

QFrame から派生したカスタム ウィジェットがあります。非常に頻繁に描画する必要があります (基本的に、マウスを動かすたびに画像が更新されます)。私は Qt Basic の描画例を確認しました: それらは paintEvent をオーバーライドし、ペインターを作成し、描画を行います (そして、ペインターは寿命の終わりに終了し、最後の中かっこに直面します)。

私の小さなテストアプリでは、パフォーマンスは問題になりませんが、ペイント操作 (または、頻繁に呼び出されるメソッドで一時オブジェクトをインスタンス化するコスト) をよりよく理解したいので、疑問に思っていました: カスタム QFrame がへのポインターを保持していた場合(恒久的な) ペインターであり、それをペイントに使用する場合、paintEvent の呼び出しごとに作成および削除するよりも望ましいでしょうか?

時間をありがとう、ルイーズ

4

1 に答える 1

4

簡単に言えば、心配しないでください。

Qt は、QPainter の作成を高速化するために舞台裏でいくつかの魔法を実行します。特に、状態の「重い」部分 (ペイント エンジン) は、同じペイント デバイス上で動作するすべての QPainter によって共有されます。(こちらをご覧ください。)

ハンドラーからペインターを必要とする一連の関数を呼び出す場合はpaintEvent、QPainter への参照を渡します。個別の呼び出しごとに作成する必要はありません。
しかし、一般的に、それについて心配する必要はありません。例で見たのと同じイディオムを使用し、 QPainters のインスタンス化がコードのボトルネックであることを実際に測定する場合にのみ、「よりスマートな」ことを試してみてください。

(これは QPainter に限定されたものではありません。Qt は多くの「舞台裏」の共有、重いオブジェクトのコピー オン ライト タイプの操作を行います。例とチュートリアルは、API の使用方法を示しています (そして、それらは一般的にかなり高品質です。例に従い、より複雑な管理が必要な特定の理由/ユースケースがある場合にのみ、それらを裏切るようにしてください。)

于 2012-04-09T11:10:35.657 に答える