Angenommen, ich habe ein QGrahicsRectItem Element mit item.width = 10 und item.height = 10. Die obere linke Ecke ist bei (0,0). item.BoundingRect()
sollte ein RectF(0,0,9,9)
zurückkehren, sondern es gibt eine RectF(0,0,10,10)
QGraphicsRectItem :: boundingRect() gibt einen QRectF ein, der 1px größer ist als er sein sollte
Sie können es mit dem folgenden Code testen:
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
So boundingRect() gibt einen RectF, die eine Breite und Höhe von 11px hat, obwohl Breite () und Höhe() behaupten, es ist 10 für beide.
Was ist los?
Aber immer noch ist das RectF 11px breit und nicht 10. Das ist keine Frage der Perspektive, sondern eine Tatsache, die zu Problemen führt. Das ist der Punkt. Wenn ich motioningRect() verwende, um Mausereignisse in meinen 10px-Elementen abzufangen, erhalte ich auch Ereignisse, die 1px vom Objekt entfernt sind. – problemofficer
Was meinst du? Ist es 11px breit gerendert? Weil das Debugger eindeutig sagt, dass es 10 px breit ist. Also ist die boundingRect() wirklich 10px breit (und in diesem Fall ist es auch rect()). – Palmik
Ein Grafikelement hat ein fortlaufendes Koordinatensystem, keine Pixel. In realen Koordinaten ist die Länge der Linie, die von 0 bis 10 geht, 10, nicht 11. Wenn die Szene gerendert wird, müssen die Objekte natürlich erneut gerastert werden, so dass Sie die genaue Größe in Pixeln nicht vorhersagen können sollte sich nicht darauf verlassen. Versuchen Sie, die * Event-Handler von QGraphicsScene mit QGraphicsSceneMouseEvents zu verwenden. –