QGraphicsRectItem::boundingRect() возвращает QRectF, который в 1 раз больше, чем должен быть
Допустим, у меня есть элемент 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() возвращает RectF с шириной и высотой 11 пикселей, хотя width () и height () утверждают, что для обоих это 10.
В чем дело?
2 ответа
Я думаю, что вы путаете координаты с массивами здесь. Вышеуказанные результаты верны.
Если вы отойдете на 10 метров от стены и повернетесь, чтобы измерить расстояние, вы должны быть на расстоянии 10 метров, верно? Не 9 - потому что вы не можете быть внутри стены, прежде чем сделать первый шаг. Это также означает, что толщина стены составляет 1 метр.
Я не вижу ничего плохого в этом. Я представляю это так (замените 10 на 3)
0 1 2 3
0 |==|==|==|
| 1| 2| 3|
1 |==|==|==|
| 1| 2| 3|
2 |==|==|==|
| 1| 2| 3|
3 |==|==|==|
Он имеет ширину и высоту 3, а нижний левый угол - в [3,3], это верно?:)
Редактировать:
Здесь вы можете увидеть, как он на самом деле рассчитывается (обратите внимание, что он рассчитывается по-разному для QRect и QRectF по историческим причинам (это то, что утверждают документы)).