谷歌搜索建议它应该。
但是 dragdroprobot示例实现(在父 Robot 对象上)建议不要:
QRectF Robot::boundingRect() const
{
return QRectF();
}
哪个是正确的,还是有更微妙的事情发生?
子项直接由场景而不是父项绘制,并且根据有关以下内容的文档boundingRect()
:
QGraphicsView 使用它来确定项目是否需要重绘。
因此,如果父项中没有要绘制的内容,则即使父项有子项,也无需返回非空边界矩形。如果父级中有一些绘图,它只需要包含自己的边界矩形。
在正常使用情况下,您的 QGraphicsItem 的子项包含在其边界矩形内,但根据您的实现,我不认为这是必需的。
如果您需要项目子项的边界矩形,您可以简单地使用
QGraphicsItem::childrenBoundingRect();
可能相关:
QGraphicItemGroup
是不同的。 文档说:
QGraphicsItemGroup 的 boundingRect() 函数返回项目组中所有项目的边界矩形。
(但是,尽管 QGraphicsItemGroup 继承了 QGraphicsItem,但文档并没有说 boundingRect 被重新实现。这可能是文档中的一个缺陷。)
QGraphicItem.shape()
似乎类似于boundingRect()
视图为每个实例调用它(为了选择 ie QGraphicsView.items()
,类似于boundingRect()
为了确定需要重绘的目的而调用它)。据我所知,QGraphicItemGroup.shape()
is never called by QGraphicsView.items()
. 文档没有说它是重新实现的。