0

假设我有一个带有 item.width=10 和 item.height=10的 QGrahicsRectItem项。它的左上角在 (0,0)。item.BoundingRect()应该返回 aRectF(0,0,9,9)但它返回 aRectF(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。

怎么了?

4

2 回答 2

0

我认为这没有错。我想象它是这样的(将 10 替换为 3)

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

它的宽度和高度为 3,左下角在 [3,3],对吗?:)

编辑:

在这里,您可以看到它的实际计算方式(注意,由于历史原因,QRect 和 QRectF 的计算方式不同(这是文档声称的))。

QRect坐标和QRectF坐标系。

于 2010-11-27T23:49:41.227 回答
0

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

如果你离墙有10米的距离,然后转身测量距离,你应该有10米的距离,对吧?不是 9 - 因为在迈出第一步之前你不能进入墙内。这也意味着墙壁有 1 米厚。

于 2010-11-27T23:51:39.213 回答