2016-10-03 3 views
0

引数なしでupdate()またはrepaint()を呼び出すと、すべての要素(下の可視要素を含む)が完全に再描画されます。これは、ClipRectをパラメータとして渡すことで最適化できます。 再描画された領域を簡単に取得する方法はありますか、それとも手動で決定する必要がありますか?Qtで再塗りつぶされた領域を取得する方法はありますか?

P.S. QGraphicsSceneを使用する際にはこのような問題はありませんが、私はQmlApplicationViewerとQDeclarativeItemsを扱っています。それを同じ振る舞いに強制する方法があるかもしれません。

+0

詳細を教えてください*再描画された領域を簡単に取得する方法はありますか?これは手動で実装する必要がありますか?これは何ですか"? – peppe

+0

イメージの上に軽量のオブジェクトが描画され、イメージ全体が再描画されます。これを避けるために、オブジェクトのいくつかについては、オブジェクトをカバーする最小の矩形を返すgetClipRect()メソッドを実装しました。この矩形を次にupdate()メソッドに渡します。しかし、Qtは塗りつぶし領域(QGraphicsSceneと同じように)を知っている必要があるので、すべてのオブジェクトにgetClipRect()を書く必要はありません。 –

答えて

1

再塗りつぶし領域を簡単に取得する方法はありますか、それとも手動で と判断する必要がありますか?

paintEvent(に渡されQPaintEventオブジェクト)を使用すると、再描画することが特に必要ではQWidgetのどの部分(複数可)を決定するために調べることができるrectregionメンバーが含まれています。

+0

paint(QPainter *、QStyleOptionGraphicsItem *、QWidget *)? –

+0

QStyleOptionGraphicsItemには、有用であるかもしれないが、再描画が必要な項目の部分ではなく、画面上に現在表示されている項目の部分を表すように見える、 'exposedRect'メンバーがあります。適切なウィジェット(つまり、すべてのアイテムに対してpaint()を呼び出すウィジェット)のpaintEvent()をオーバーライドし、渡されたQPaintEventオブジェクトのrectオブジェクトをどこかにキャッシュしてから、そのpaintEventスーパークラス。次に、あなたのアイテムはその矩形のキャッシュされたコピーを見ることができます。 –

関連する問題