防止在QtQuick Qml自定义控件中重新绘制底层元素

时间:2016-11-08 13:11:05

标签: qt qml qt-quick

我有两个自定义的QML组件,继承自QDeclarativeItem

在我的组件的构造函数中,我设置了以下选项:

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

在我的应用程序中,我有一个类型的元素在另一个类型的元素之上。这些元素不共享任何属性,但当其中一个属性重绘时,另一个属性也会重新绘制。

如果我将一些标准元素放在我的元素上方(例如TextRectangle)并更改它的属性,则不会重新绘制我的元素。所以我想,我忘了在我的组件中设置一些标志。

如果在另一个项目发生变化时如何防止重绘?

我正在使用Qt 4.8和QtQuick 1.1

1 个答案:

答案 0 :(得分:1)

在任何基于栅格的渲染系统中,绘图都在后备存储缓冲区上完成。因此,当QGraphicsView中的任何内容发生变化时,所有未完全遮挡的项目必须按从后到前的Z顺序绘制。如果任何可见项目发生更改,则必须重新绘制与其相交的所有可见项目。

您所看到的看起来像是正常行为。除非你提供一些代码,否则不可能说出来。