У кого-нибудь есть лучший способ сдержать ребенка от QGraphicsItem
до сцены?Сдерживание ребенка QGraphicsItem к сцене?
Я успешно связал родителя QGraphicsItem
с его сценой, переопределив itemChange
, но теперь мне нужно сделать то же самое для ребенка QGraphicsItem
.
Пример использования регистра:
Этот код работает ... по большей части. Единственная проблема заключается в скорости он QGraphicsItem
«s при ударе по обе стороны будет влиять на его endstop положение:
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
У меня нет этого кода. Ползунок движется так же быстро, как и мышца. –