有沒有人有更好的方法來約束一個QGraphicsItem
的孩子到場景?約束子QGraphicsItem到場景?
我已經通過重寫itemChange
成功地將父母QGraphicsItem
正確地約束到它的場景,但現在我需要爲子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;
}
父項,我用: newPos.setX(qMin(scRect.right(), qMax(newPos.x(), scRect.left())));
它完美地工作,但我難倒,以如何或如果我可以在這裏使用它。
要現場或查看? – dtech
問題在於在調用'setPos'之前添加速度的代碼,您不需要在'itemChange'中執行此操作。你可以顯示該代碼嗎? – TheDarkKnight
我沒有那個代碼。滑塊只能像鼠標拖動一樣快。 –