Disons que j'ai un QGrahicsRectItem item avec item.width = 10 et item.height = 10. Son coin supérieur gauche est à (0,0). item.BoundingRect()
devrait retourner un RectF(0,0,9,9)
mais il renvoie un RectF(0,0,10,10)
QGraphicsRectItem :: boundingRect() retourne un QRectF qui est 1px plus grand que ce qu'il devrait être
Vous pouvez le tester avec le code suivant:
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
Alors retourne boundingRect() un RectF qui a une largeur et une hauteur de 11px, bien que la largeur () et la hauteur() prétendent que c'est 10 pour les deux.
Qu'est-ce qui ne va pas?
Mais le RectF est toujours 11px de large et pas 10. Ce n'est pas une question de perspective mais un fait qui conduit à des problèmes. C'est le but. Si j'utilise boundingRect() pour attraper des événements de souris dans mes objets 10px, j'obtiendrai également des événements, qui sont à 1px de l'élément. – problemofficer
Que voulez-vous dire? Est-il rendu 11px de large? Parce que le débogage dit clairement que c'est 10px de large. Donc le boundingRect() est vraiment large de 10px (et rect() dans ce cas). – Palmik
Un élément graphique a un système de coordonnées continues, et non des pixels. En coordonnées réelles, la longueur de la ligne qui va de 0 à 10 est de 10 et non de 11. Lorsque la scène est rendue, les éléments doivent encore être rastérisés, donc vous ne pouvez pas prédire la taille exacte en pixels, et ne devrait pas compter dessus. Essayez d'utiliser la souris de QGraphicsScene * Les gestionnaires d'événements passant QGraphicsSceneMouseEvents. –