qgraphicsview 设定放大点为鼠标当前点
时间: 2023-06-26 20:10:20 浏览: 227
如何使QGraphicsItem不随QGraphicsView放大缩小而改变大小
3星 · 编辑精心推荐
可以通过重载 `QGraphicsView` 的 `wheelEvent` 函数来实现放大点为鼠标当前点:
```python
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QTransform
from PyQt5.QtWidgets import QGraphicsView
class MyGraphicsView(QGraphicsView):
def wheelEvent(self, event):
# 获取鼠标当前点的坐标
mouse_point = self.mapToScene(event.pos())
# 调用父类的 wheelEvent 函数
super().wheelEvent(event)
# 获取当前的缩放因子
scale_factor = 1.1 ** (event.angleDelta().y() / 240.0)
# 缩放视图
self.scale(scale_factor, scale_factor)
# 获取缩放后的鼠标点坐标
mouse_point_after_scale = self.mapToScene(event.pos())
# 计算缩放前后鼠标点的坐标差
mouse_point_diff = mouse_point_after_scale - mouse_point
# 将视图平移,使得缩放前后鼠标点的位置相同
self.translate(mouse_point_diff.x(), mouse_point_diff.y())
```
在 `wheelEvent` 函数中,首先获取鼠标当前点的坐标,然后调用父类的 `wheelEvent` 函数处理缩放事件。接着根据缩放因子缩放视图,再获取缩放后的鼠标点坐标,通过计算缩放前后鼠标点的坐标差,将视图平移,使得缩放前后鼠标点的位置相同。这样就实现了放大点为鼠标当前点的效果。
阅读全文