6

谷歌搜索建议它应该

但是 dragdroprobot示例实现(在父 Robot 对象上)建议不要:

QRectF Robot::boundingRect() const
{
    return QRectF();
}

哪个是正确的,还是有更微妙的事情发生?

4

3 回答 3

7

子项直接由场景而不是父项绘制,并且根据有关以下内容的文档boundingRect()

QGraphicsView 使用它来确定项目是否需要重绘。

因此,如果父项中没有要绘制的内容,则即使父项有子项,也无需返回非空边界矩形。如果父级中有一些绘图,它只需要包含自己的边界矩形。

于 2011-09-16T18:15:18.037 回答
1

在正常使用情况下,您的 QGraphicsItem 的子项包含在其边界矩形内,但根据您的实现,我不认为这是必需的。

如果您需要项目子项的边界矩形,您可以简单地使用

QGraphicsItem::childrenBoundingRect();
于 2011-09-16T21:04:03.697 回答
1

可能相关:

  1. QGraphicItemGroup是不同的。

文档说:

QGraphicsItemGroup 的 boundingRect() 函数返回项目组中所有项目的边界矩形。

(但是,尽管 QGraphicsItemGroup 继承了 QGraphicsItem,但文档并没有说 boundingRect 被重新实现。这可能是文档中的一个缺陷。)

  1. QGraphicItem.shape()似乎类似于boundingRect()视图为每个实例调用它(为了选择 ie QGraphicsView.items(),类似于boundingRect()为了确定需要重绘的目的而调用它)。

据我所知,QGraphicItemGroup.shape()is never called by QGraphicsView.items(). 文档没有说它是重新实现的。

于 2013-02-09T14:11:48.533 回答