誰かが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;
}
:完全に働いたが、私がするよう困惑 newPos.setX(qMin(scRect.right(), qMax(newPos.x(), scRect.left())));
をどちらかの側を打つとき唯一の問題は、そのエンドストップ位置に影響を与えますQGraphicsItem
の速度であり、それをどうやって使うことができますか?
シーンを見たり表示するには? – dtech
問題は、 'setPos'を呼び出す前に速度を追加するコードにあります。これは' itemChange'でこれを行う必要はありません。そのコードを表示できますか? – TheDarkKnight
私はそのコードを持っていません。スライダはマウスがドラッグするのと同じ速さで動きます。 –