子项由场景直接绘制,而不是由父项绘制,并根据关于boundingRect()
的文档:
QGraphicsView使用此方法来确定项是否需要重绘。
因此,如果父项没有绘制工作,则即使父项有子项,也无需返回非空的边界矩形。如果父项中有一些绘制工作,则只需要包含其自身的边界矩形即可。
QGraphicsItem::ItemHasNoContents
,并将子项堆叠在父项后面,这样父项就会在子项之前获取鼠标事件。 - alexisdm可能相关:
QGraphicItemGroup
是不同的。文档说:
QGraphicsItemGroup 的 boundingRect() 函数返回项组中所有项的边界矩形。
(但是,文档没有说明 boundingRect 被重新实现了,尽管 QGraphicsItemGroup 继承了 QGraphicsItem。这可能是文档中的缺陷。)
QGraphicItem.shape()
似乎类似于 boundingRect()
,因为视图为每个实例调用它(用于选择,即 QGraphicsView.items()
,类似于 boundingRect()
被调用以确定需要重新绘制什么)。据我所知,QGraphicItemGroup.shape()
从未被 QGraphicsView.items()
调用。文档没有说明它被重新实现。
在正常使用情况下,您的QGraphicsItem的子项包含在其边界矩形内,但根据您的实现,我不认为这是必需的。
如果您需要一个项目子项的边界矩形,您可以简单地使用
QGraphicsItem::childrenBoundingRect();