我正在使用QGraphics Scene进行混合项目。所以我将图片放在QGraphicsscene中作为QgraphicspixmapItem。但问题是当我移动它时(通过鼠标拖动),QGraphics视图会自动扩展。我想限制这个动作。有人可以帮助我吗?
答案 0 :(得分:1)
最小代码示例可能会有所帮助。您是否指定了sceneRect?请注意这个问题:
QGraphicsView scrolling and image scaling/cropping
问:边界“难”吗?换句话说:如果我发生了什么 使用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)。
我将它与适当的功能结合起来,该功能检查所选项目的位置并将其保持在给定区域内。