나는 내 문제를 해결했습니다!
이 내용을 추가하면 내 QGraphicsItem
의 위치를 설정하는 방법을 재정의 할 수 있습니다. 내 항목은이 같은 boundingRect()
에 의해 정의된다
QRectF MyClass::boundingRect() const
{
return QRectF(-_w/2, -_h/2, _w, _h);
}
그래서 나는이
QRectF
장면 내부에 유지하고 싶었다. 내 항목의 위치는
QRectF
의 가운데에 의해 정의됩니다.
QVariant Aabb::itemChange(GraphicsItemChange change, const QVariant &value)
{
if (change == ItemPositionChange && scene()) {
// value is the new position.
QPointF newPos = value.toPointF();
QRectF rect = scene()->sceneRect();
if (!rect.contains(newPos.x() - _w/2, newPos.y() - _h/2)||!rect.contains(newPos.x() - _w/2, newPos.y() + _h/2)||!rect.contains(newPos.x() + _w/2, newPos.y() + _h/2)||!rect.contains(newPos.x() + _w/2, newPos.y() - _h/2))
{
// Keep the item inside the scene rect.
newPos.setX(qMin(rect.right() - _w/2, qMax(newPos.x() , rect.left() + _w/2)));
newPos.setY(qMin(rect.bottom() - _h/2, qMax(newPos.y() , rect.top() + _h/2)));
return newPos;
}
}
return QGraphicsItem::itemChange(change, value);
}
가 (질문에 주석을 참조) 장면의
QRectF
을 설정하는 것을 잊지 마세요 : 여기 @Salvatore Avanzo에 의해 제안 된 Qt는 문서의 코드를 사용 내 코드입니다.
대단히 감사합니다.이 방법이 훨씬 효과적입니다. 실제로 나는 오른쪽과 아래쪽 영역에서 같은 문제가있었습니다. – danger89