QGraphicsRectItem :: boundingRect () возвращает QRectF, который в 1 раз больше, чем должен быть - PullRequest
0 голосов
/ 28 ноября 2010

Допустим, у меня есть QGrahicsRectItem item с 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 ]

0 голосов
/ 28 ноября 2010

Я думаю, что вы путаете координаты с массивами здесь.Вышеприведенные результаты верны.

Если вы отойдете на 10 метров от стены и повернетесь, чтобы измерить расстояние, вы должны быть на расстоянии 10 метров, верно?Не 9 - потому что вы не можете быть внутри стены, прежде чем сделать первый шаг.Это также означает, что толщина стены составляет 1 метр.

0 голосов
/ 28 ноября 2010

Я не вижу в этом ничего плохого. Я представляю это так (замените 10 на 3)

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

Он имеет ширину и высоту 3, а нижний левый угол - в [3,3], это верно? :)

Edit:

Здесь вы можете увидеть, как на самом деле он рассчитывается (обратите внимание, что он рассчитывается по-разному для QRect и QRectF по историческим причинам (именно так утверждают документы)).

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

...