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 по историческим причинам (это то, что утверждают документы)).

Система координат QRect и система координат QRectF.

Другие вопросы по тегам