0

item.width=10 と item.height=10の QGrahicsRectItemアイテムがあるとします。その左上隅は (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 であると主張しています。

どうしたの?

4

2 に答える 2

0

何も悪いことはわかりません。私はそれをこのように想像します(3を10に置き換えます)

   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 に答える