我在限制 QGraphicItems 的移动时遇到问题:
QVariant CustomRectItem::itemChange(GraphicsItemChange change, const QVariant& value)
{
if (change == QGraphicsItem::ItemPositionChange && this->scene()) {
// parameter value is the new position
QPointF newPos = value.toPointF();
QRectF rect = this->scene()->sceneRect();
// keep the item inside the scene rect
if (!rect.contains(newPos)) {
if(newPos.x() < rect.x())
newPos.setX(rect.x());
return newPos;
}
}
return QGraphicsItem::itemChange(change, value);
}
这段代码应该防止一个项目被拖到场景的左边,从而增加它的大小。它有点工作。我的问题是:
我在创建场景时插入项目。On 位于 x=0(场景坐标)。另一个位于 x=10(场景坐标)。使用此代码,我不能拖动 x=10 左侧的第二个项目。
似乎对QGraphicsItem::scene()的调用为这两个项目返回了不同的场景。