2016-11-08 10 views
1

QDeclarativeItemから継承した2つのカスタムQMLコンポーネントがあります。私は別のタイプの要素上記のいずれかのタイプの要素を持っている私のアプリケーションでアンダーレイ要素の再描画を防ぐint QtQuick Qmlカスタムコントロール

setFlag(QGraphicsItem::ItemHasNoContents, false); 
setCacheMode(QGraphicsItem::ItemCoordinateCache); 

:私のコンポーネントのコンストラクタで

私は、このオプションを設定します。この要素はプロパティを共有しませんが、そのうちの1つが再描画されると、別のものも再描画されます。

私の要素の上に(TextまたはRectangleのような)いくつかの標準要素を置き、そのプロパティを変更すると、要素が再描画されません。だから、私は私のコンポーネントにいくつかのフラグを設定することを忘れてしまったと思います。

別のアイテムが変更されているときに、あるアイテムの再描画を防止するにはどうすればよいですか?

私はQtの4.8と任意のラスタベースのレンダリングシステムで

答えて

1

QtQuick 1.1を使用していますが、図面はバッキングストアバッファ上で行われます。したがって、QGraphicsViewで何かが変更された場合、完全に隠蔽されていないすべての項目は、前から後ろのZ順に描画されなければなりません。 目に見える項目が変更された場合は、すべて目に見える項目は再描画する必要があります。

通常の動作のようです。いくつかのコードを提供しない限り、それ以外のことは言い表せません。

+0

私は知っていますが、私が正しいとすれば、キャッシュは不要な再描画を防ぐ必要があります。 これは、キャッシングをオンにしてから(上記のように)標準要素で作業を開始しました。しかし、私の自作コンポーネントでは、キャッシュは機能しません。私は、私の要素の再描画が他の要素の出現に影響しないことをフレームワークに通知する必要があると思います。 – Paboka

+0

キャッシングは合成の必要性を妨げるものではなく、それも無料ではありません。 –

関連する問題