누구든지 QGraphicsItem
의 자식을 장면에 구속하는 더 좋은 방법이 있습니까?하위 QGraphicsItem을 장면에 제한하겠습니까?
itemChange
을 재정 의하여 정상적으로 QGraphicsItem
의 부모를 제한했지만, 지금은 자식 QGraphicsItem
에 대해서도 동일한 작업을 수행해야합니다.
예 사용의 경우는 :
이 코드는 대부분 ... 작동합니다. 상위 항목에 대해
QVariant SizeGripItem::HandleItem::itemChange(GraphicsItemChange change,
const QVariant &value)
{
QPointF newPos = value.toPointF();
if (change == ItemPositionChange)
{
if(scene())
{
newPos.setY(pos().y()); // Y-coordinate is constant.
if(scenePos().x() < 0) //If child item is off the left side of the scene,
{
if (newPos.x() < pos().x()) // and is trying to move left,
{
newPos.setX(pos().x()); // then hold its position
}
}
else if(scenePos().x() > scene()->sceneRect().right()) //If child item is off the right side of the scene,
{
if (newPos.x() > pos().x()) //and is trying to move right,
{
newPos.setX(pos().x()); // then hold its position
}
}
}
}
return newPos;
}
, 내가 사용 : 유일한 문제는 endstop 위치에 영향을 미칠 것입니다 양쪽을 타격 할 때 QGraphicsItem
의 속도입니다 완벽하게 작동 newPos.setX(qMin(scRect.right(), qMax(newPos.x(), scRect.left())));
,하지만 난에로 난처한 상황에 빠진거야 내가 어떻게 여기 그것을 사용할 수 있는지.
장면을 보거나 보시겠습니까? – dtech
문제는 속도를 추가하는 코드에 있으며,'setPos'를 호출하기 전에'itemChange'에서 이것을하지 않아도됩니다. 그 코드를 보여줄 수 있습니까? – TheDarkKnight
그 코드가 없습니다. 슬라이더는 마우스가 끌 때처럼 빠르게 움직입니다. –