QGrahicsRectItem アイテムをitem.width = 10、item.height = 10に設定しているとします。その左上隅は(0,0)にあります。 item.BoundingRect()
はRectF(0,0,9,9)
を返すべきではなく、それはRectF(0,0,10,10)
QGraphicsRectItem :: boundingRect()は、1より大きいQRectFを返します
を返す次のコードでそれをテストすることができます。
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を返します。 )とheight()は両方とも10であると主張しています。
どういうところが間違っていますか?
しかし、RectFの幅は11pxで、10ではありません。これは遠近法の問題ではなく、問題を引き起こす事実です。それがポイントです。 boundingRect()を使用して10pxアイテムのマウスイベントを捕捉すると、アイテムから1px離れたイベントも取得されます。 – problemofficer
どういう意味ですか? 11px幅にレンダリングされていますか?デバッグでは10pxの幅があることが明らかになっているためです。したがって、boundingRect()は実際には10ピクセル幅です(この場合はrect()です)。 – Palmik
グラフィックスアイテムにはピクセルではなく連続座標系があります。実際の座標では、0から10までの線の長さは、11ではなく10です。シーンがレンダリングされると、もちろん、アイテムを再度ラスタライズする必要があります。正確なサイズをピクセル単位で予測することはできません。それに頼るべきではありません。 QGraphicsSceneのマウス*イベントハンドラをQGraphicsSceneMouseEventsに渡してみてください。 –