En alternative aux zooms avant/arrière pour naviguer dans la scène, signalons qu'on
peut utiliser les quatre touches directionnelles du clavier pour se déplacer. Il s'agit
d'une fonction héritée de QGraphicsView, elle-même héritée de QAbstractScrollArea.
Pour améliorer la précision du point d'ancrage…
Peut-être avez vous remarqué de petites anomalies lors des zooms avant ou arrière :
parfois, le carré pointé change pour un carré voisin alors que le pointeur souris
reste immobile. Ceci est inattendu, car on a bien spécifié un point d'ancrage
AnchorUnderMouse dans le constructeur de la vue. En fait, il semble que cette
fonction du framework souffre d'une instabilité numérique due au fait que les
coordonnées scène opèrent, pour notre application un peu particulière, sur une très
grande plage de valeurs. Avant de parler de bug, on peut faire l'hypothèse que les
développeurs de Qt ont privilégié la performance à la précision, ce qui semble un
choix acceptable pour la plupart des applications.
Le problème étant posé, il est possible de corriger cette imprécision en utilisant les
méthodes primitives de QGraphicsView. Voici une recette possible (la méthode
wheelEvent reste inchangée).
…
from PyQt5.QtGui import QCursor
…
class VueMosaiQ(QGraphicsView):
def __init__(self,scene):
…
self.setTransformationAnchor(QGraphicsView.NoAnchor)
self.hScrollBar = self.horizontalScrollBar() self.vScrollBar =
self.verticalScrollBar() def zoom(self,facteur): if facteur < 0.0: facteur = -1.0 /
facteur posVue1 = self.mapFromGlobal(QCursor.pos()) posScene =
self.mapToScene(posVue1) self.scale(facteur,facteur) posVue2 =
self.mapFromScene(posScene) dxVue = posVue2.x() - posVue1.x() dyVue =
posVue2.y() - posVue1.y() self.hScrollBar.setValue(self.hScrollBar.value()+dxVue)
self.vScrollBar.setValue(self.vScrollBar.value()+dyVue)
Cette méthode est un peu compliquée et descend clairement dans les couches basses
du framework.
On commence par enlever tout traitement du point d'ancrage
(QGraphicsView.NoAnchor) , sachant qu'on va réaliser ce traitement nous243
Précédent

- 244/494

Suivant