在pixmap缩放后,QGraphicsView不会调整大小,而pixmap不再居中

时间:2014-04-23 13:42:57

标签: python qt pyqt qgraphicsview qgraphicsscene

我创建了一个QGraphicsView,里面有一个QGraphicsScene。我在QGraphicsScene中加载了一个像素图。实际上它是一个继承的QGraphicsScene,它实现了一个wheelEvent,以便进行放大/缩小功能。缩放功能根据轮子的旋转将像素图向上或向下缩放10%。缩放工作正常,但QGraphicsView大小或QGraphicsScene大小获取已尝试的旋转的最大大小的值,而不再是中心。例如,如果我使用启用滚动条的wso来扩展它,那么如果我向下缩放滚动条仍然启用并且像素图位于左上角。 有什么建议吗?

提前谢谢。

编辑:QGraphicsView的缩放功能创建了一个低质量的像素图,这就是我不使用它的原因。我正在添加一个缩放的像素图,并在每次旋转时我再次缩放它并投影到GraphicsView。但是,如前所述,GraphicsView或QGraphicsScene的大小已经调整了问题。

2 个答案:

答案 0 :(得分:2)

经过很长一段时间,我找到了解决方法。问题是场景没有跟随像素图的大小。例如,当我滚动并创建一个大的像素图以便需要滚动条时,如果我滚动并创建一个小像素图,滚动条仍然存在,因为场景的大小没有改变。但是我通过在添加新像素图之后在场景中设置矩形来找到解决方案。所以在wheelEvent (self, event)函数内部,在通过self.clear()清除场景并添加新的缩放像素图后,场景的大小也需要更改。为此,我使用了以下命令,其中self.__size是缩放像素图的新大小。

self.setSceneRect(QtCore.QRectF(0.0, 0.0, self.__size.width(), self.__size.height()))

答案 1 :(得分:0)

不要QGraphicsScene的子类。 对QGraphicsView进行子类化以获取滚轮事件,并相应地更改视图转换。使用setTransform在图形视图上设置世界变换。

这是正确的做法。从概念上讲,场景中的对象不会改变大小。您的观点是变化,您正在放大/缩小。这是相机的移动,而不是物体的增长/缩小。

您可以使用项目的paint方法中的level of detail根据缩放系数绘制图像的高分辨率或低分辨率版本。

有一个很好的demo with 4000 chips,其中使用了详细程度。

相关问题