python - 为什么我自己的QGraphicsView中使用mouseMoveEvent会使setTransformationAnchor失效?
问题描述
当我使用滚轮缩放图像时,图像将始终以左上角的锚点进行缩放。
但是当我注释掉mouseMoveEvent函数时,图像可以以鼠标位置为锚点进行缩放。
这是我的代码:
class myQGraphicsView(QGraphicsView):
def __init__(self, *__args):
super().__init__(*__args)
self.setTransformationAnchor(self.AnchorUnderMouse)
self.pressed = 0
self.setMouseTracking(False)
def mousePressEvent(self, QMouseEvent):
print(1)
self.pressed = 1
self.last_mouse_x = QMouseEvent.x()
self.last_mouse_y = QMouseEvent.y()
def mouseMoveEvent(self, QMouseEvent):
if self.pressed == 1:
self.current_mouse_x = QMouseEvent.x()
self.current_mouse_y = QMouseEvent.y()
self.horizontalScrollBar().setValue(
self.horizontalScrollBar().value() -(self.current_mouse_x - self.last_mouse_x))
self.verticalScrollBar().setValue(
self.verticalScrollBar().value() - (self.current_mouse_y - self.last_mouse_y))
# print(self.current_mouse_x - self.last_mouse_x, self.current_mouse_y - self.last_mouse_y)
# self.img_view.translate(self.current_mouse_x - self.last_mouse_x, self.current_mouse_y - self.last_mouse_y)
# self.img_view.translate(1, 1)
self.last_mouse_x = self.current_mouse_x
self.last_mouse_y = self.current_mouse_y
def mouseReleaseEvent(self, QMouseEvent):
self.pressed = 0
def wheelEvent(self, QWheelEvent):
if QApplication.keyboardModifiers() == Qt.ControlModifier:
print(self.mapToScene(self.x(), self.y()))
angle = QWheelEvent.angleDelta().y()
if angle > 0:
scale_factor = 1.25
else:
scale_factor = 0.8
self.scale(scale_factor, scale_factor)
ui_1.current_img_w = ui_1.current_img_w * scale_factor
ui_1.current_img_h = ui_1.current_img_h * scale_factor
解决方案
推荐阅读
- windows - 如何锁定 docker 的 config.json 文件?
- r - 从模拟数据中分离两个类
- javascript - 如何从 `.txt` 或 `.css` 文件中获取 html 中选项标签中的数据?
- javascript - JS 跳过第一个事件的 if 语句
- dependencies - .deb 取决于间隔
- python - 如何规范化非均匀 Python 数据帧
- php - 在 Laravel 中获取 allDirectories() 并创建一棵树
- python - 获取其他列中唯一值的最大值行:python
- node.js - 为 2FA 实施生成恢复代码
- assembly - AT&T asm ascii 整数转换