Bonjour tout le monde,
alors voilà la situation : j'ai une interface qui possède deux Graphics View qui affiche la même chose, c'est à dire qui possède les mêmes QGraphicsObject et à la même place mais pas forcement les mêmes informations encodées à l'intérieur ; mais ce n'est pas le coeur du problème.
J'ai mis en place un zoom avec l'attribut "AnchorUnderMouse" et la possibilité de se déplacer (translation) après un zoom avec l'attribut "ScrollHandDrag".
Je peux effectuer cela sur les deux QGraphicsView sans soucis de manière indépendante mais j'aimerais plutôt synchroniser ces transformations. En gros lorsque je zoom ou translate sur un des QGraphicsView, cela se répercute sur l'autre, de telle sorte que l'on visualise toujours la même zone sur les deux QGraphicsView.
Pour cela j'ai mis un système de slot/signal pour communiquer entre les deux QGraphicsView qui à l'air de fonctionner => lors d'un changement d'un QGraphicsView j'envoie "quelque chose dont je ne sais pas encore la nature" à l'autre QGraphicsView pour qu'il applique ce même changement.
J'ai dans un premier temps envoyé la matrice QTransform que je récupère à l'aide de la méthode QTransform QGraphicsView::transform(); et sur l'autre j'applique la QTransform reçu à l'aide de la méthode void QGraphicsView::setTransform ( const QTransform & matrix, bool combine = false );
Cela implique que le zoom se fait bien de manière synchro mais malheureusement pas avec le même centre => pour la QGraphicsView où se fait réellement le zoom, le centre est sous la souris, par contre pour l'autre c'est le milieu de la QGraphicsView.
De plus la translation n'est pas du tout synchronisé...
Donc les questions sont les suivantes :
- Comment synchroniser complètement le zoom et donc avoir le même centre ?
- Comment faire pour que la translation soit aussi pris en compte dans la synchronisation ?
Partager