2016-11-08 100 views
1

我有兩個自定義的QML組件,從QDeclarativeItem繼承。防止底層元素重繪int QtQuick Qml自定義控件

以我組件的構造我設置該選項:

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

在我的應用程序具有一種類型的另一種類型的元件的上方的元件。這些元素不共享任何屬性,但是當其中一個屬性重繪時,另一個屬性也會重繪。

如果我在元素上方放置了一些標準元素(如TextRectangle)並更改它的屬性,它不會重繪我的元素。所以我想,我忘了在組件中設置一些標誌。

如何防止一個項目重繪時,另一個正在改變?

我使用Qt 4.8和1.1 QtQuick

回答

1

在任何基於光柵的渲染系統,附圖是在背襯上存儲緩衝器來完成。因此,當QGraphicsView中的任何內容發生變化時,所有未完全遮擋的項目都必須以Z後的順序繪製。如果任何可見項目發生更改,則全部必須重繪與其相交的可見項目。

你看到的是正常行爲。除非你提供一些代碼,否則不可能說出來。

+0

我知道,但如果我是正確的,緩存必須防止不必要的重繪。 自從我打開緩存後,它開始使用標準元素(正如我前面所述)。但是用我自制的組件緩存不起作用。我想,我應該通知框架重繪我的元素不影響任何其他元素的外觀。 – Paboka

+0

緩存不會阻止合成的需要,而且這也不是免費的。 –