QGraphicsRectItem :: boundingRect()返回比它应该大1px的QRectF

时间:2010-11-27 23:11:12

标签: qt qgraphicsitem bounding

假设我有一个QGrahicsRectItem ,item.width = 10和item.height = 10。它的左上角是(0,0)。 item.BoundingRect()应该返回RectF(0,0,9,9),而是返回RectF(0,0,10,10)

您可以使用以下代码对其进行测试:

QGraphicsRectItem* item = new QGraphicsRectItem(0,0,10,10);
qDebug() << item->boundingRect().width();           // 10, OK
qDebug() << item->boundingRect().height();          // 10, OK
qDebug() << item->boundingRect().topLeft().x();     // 0,  OK
qDebug() << item->boundingRect().topLeft().y();     // 0,  OK
qDebug() << item->boundingRect().bottomRight().x(); // 10, WHY? should be 9
qDebug() << item->boundingRect().bottomRight().y(); // 10, WHY? should be 9

因此boundingRect()返回一个宽度和高度为11px的RectF,尽管width()和height()声称它们都是10。

怎么了?

2 个答案:

答案 0 :(得分:0)

我认为没错。我想像这样(替换10为3)

   0  1  2  3
 0 |==|==|==|
   | 1| 2| 3|
 1 |==|==|==|
   | 1| 2| 3|
 2 |==|==|==|
   | 1| 2| 3|
 3 |==|==|==|

宽度和高度为3,左下角为[3,3],是吗? :)

编辑:

Here你可以看到它是如何实际计算出来的(请注意,由于历史原因,这是针对QRect和QRectF的计算方式不同(这是文档声称的))。

QRect坐标系和QRectF坐标系。

答案 1 :(得分:0)

我认为你在这里将坐标与数组混淆了。以上结果是正确的。

如果你离墙10米远,转过来测量距离,你应该在10米外,对吗?不是9 - 因为在进行第一步之前你不能进入墙内。这也意味着墙壁厚度为1米。