QT-Graphics - 如何约束项目的移动

时间:2010-11-02 06:26:56

标签: c++ user-interface qt

我正在使用QGraphics Scene进行混合项目。所以我将图片放在QGraphicsscene中作为QgraphicspixmapItem。但问题是当我移动它时(通过鼠标拖动),QGraphics视图会自动扩展。我想限制这个动作。有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

最小代码示例可能会有所帮助。您是否指定了sceneRect?请注意这个问题:

QGraphicsView scrolling and image scaling/cropping

...和this thread on QtCentre

问:边界“难”吗?换句话说:如果我发生了什么 使用QGraphicsScene(0,0,500,500)创建QGraphicsScene 然后尝试放置一个项目让我们说位置(-50,-50)?

<答>答:不,该框架非常灵活。事实上,如果你不这样做 指定一个sceneRect,当你添加项目以包含它时它将增长 商场。

答案 1 :(得分:1)

我想你必须继承QGraphicsPixmapItem来重新实现QGraphicsItem::itemChange()方法。

看看the help page regarding this function:有一个例子可以准确展示您的目标:

QVariant Component::itemChange(GraphicsItemChange change, const QVariant &value)
{
   if (change == ItemPositionChange && scene()) {
      // value is the new position.
      QPointF newPos = value.toPointF();
      QRectF rect = scene()->sceneRect();
      if (!rect.contains(newPos)) {
         // Keep the item inside the scene rect.
         newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left())));
         newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top())));
         return newPos;
      }
  }
  return QGraphicsItem::itemChange(change, value);
}

答案 2 :(得分:0)

最后我使用了QGraphicsScene-&gt;信号(cnanged)。

我将它与适当的功能结合起来,该功能检查所选项目的位置并将其保持在给定区域内。