Reputation: 44
I am looking to find how to zoom in a QGraphicsView but on the cursor position. Currently I am able to zoom but the position it is zooming onto is not consistent.
def wheelEvent(self, event):
'''Wheel event to zoom
'''
# Run default event
QtWidgets.QGraphicsView.wheelEvent(self, event)
# Define zoom factor
factor = 1.1
if event.delta() < 0:
factor = 0.9
self.scale(factor, factor)
I have seen the use of self.mapToScene()
but have been unsuccessful
Upvotes: 1
Views: 2995
Reputation: 243897
A possible solution is to focus on the point where the mouse is, scale and recalculate the point where the new center should be:
def wheelEvent(self, event):
factor = 1.1
if event.delta() < 0:
factor = 0.9
view_pos = event.pos()
scene_pos = self.mapToScene(view_pos)
self.centerOn(scene_pos)
self.scale(factor, factor)
delta = self.mapToScene(view_pos) - self.mapToScene(self.viewport().rect().center())
self.centerOn(scene_pos - delta)
Upvotes: 5