QGrahicsRectItem이 인 item.width = 10 및 item.height = 10 인 항목이 있다고 가정 해 보겠습니다. 왼쪽 위 모서리는 (0,0)에 있습니다. , 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을 반환
비록 폭 (하십시오RectF(0,0,10,10)
다음과 같은 코드로 테스트 할 수 있습니다 item.BoundingRect()
는 RectF(0,0,9,9)
를 반환해야하지만 대신 반환)와 height()가 모두 10이라고 주장합니다.
무엇이 잘못 되었나요?
그러나 RectF는 여전히 11px 너비로 10이 아닙니다. 이는 원근법의 문제가 아니라 문제로 이어지는 사실입니다. 그것이 요점입니다. boundingRect()를 사용하여 10px 항목에서 마우스 이벤트를 잡으면 항목에서 1px 떨어진 이벤트도 가져옵니다. – problemofficer
무엇을 의미합니까? 11px 너비로 렌더링됩니까? 디버그에서는 폭이 10px라고 분명하게 말하기 때문에 그래서 boundingRect()는 실제로 10px 넓이입니다 (이 경우 rect()도 마찬가지입니다). – Palmik
그래픽 항목에는 픽셀이 아닌 연속 좌표계가 있습니다. 실제 좌표에서 0에서 10까지가는 선의 길이는 11이 아니라 10입니다. 장면이 렌더링 될 때 물론 항목을 다시 래스터해야하므로 정확한 크기를 픽셀 단위로 예측할 수는 없습니다. 그것에 의지해서는 안됩니다. QGraphicsScene의 마우스 * QGraphicsSceneMouseEvents를 전달하는 이벤트 핸들러를 사용해보십시오. –