44import logging
55
66from AnyQt .QtWidgets import QGraphicsView
7- from AnyQt .QtGui import QCursor , QIcon
7+ from AnyQt .QtGui import QCursor , QIcon , QTransform
88from AnyQt .QtCore import Qt , QRect , QSize , QRectF , QPoint , QTimer
99
1010log = logging .getLogger (__name__ )
@@ -25,6 +25,8 @@ def __init__(self, *args):
2525 self .__autoScrollTimer = QTimer (self )
2626 self .__autoScrollTimer .timeout .connect (self .__autoScrollAdvance )
2727
28+ self .__scale = 1.0
29+
2830 def setScene (self , scene ):
2931 QGraphicsView .setScene (self , scene )
3032 self ._ensureSceneRect (scene )
@@ -63,6 +65,18 @@ def mouseReleaseEvent(self, event):
6365
6466 return QGraphicsView .mouseReleaseEvent (self , event )
6567
68+ def wheelEvent (self , event ):
69+ # use mouse position as anchor while zooming
70+ self .setTransformationAnchor (2 )
71+ if event .modifiers () & Qt .ControlModifier :
72+ self .__scale += min (50 , event .angleDelta ().y ()) / 120
73+ self .__scale = min (1.5 , max (self .__scale , 0.25 ))
74+ transform = QTransform ()
75+ transform .scale (self .__scale , self .__scale )
76+ self .setTransform (transform )
77+ else :
78+ super ().wheelEvent (event )
79+
6680 def __shouldAutoScroll (self , pos ):
6781 if self .__autoScroll :
6882 margin = self .__autoScrollMargin
0 commit comments