fin, on a créé une nouvelle méthode tailleDansVue dans la classe CarreMosaiQ
(voir ) ; comme CarreMosaiQ ne connaît que les coordonnées scène, on passe en
argument la vue pour laquelle on veut obtenir la taille.
Une fois qu'on a les trois informations bien formatées dans des chaînes de
caractères, on les affiche dans les QLabel correspondants. Idéalement, on aurait pu
créer trois QLabel supplémentaires avec les parties statiques des messages ; nous
ne l'avons pas fait pour ne pas compliquer l'exemple (besoin de layouts
supplémentaires).
C'est comme cela qu'on récupère la taille du carré dans le repère de la scène ; la
valeur obtenue est celle de l'argument c passé au constructeur.
Pour calculer la taille du carré en unités vue (pixels), on utilise la méthode
mapFromScene pour faire des conversions de coordonnées scène en coordonnées
vue ; on mesure la distance vue sur l'axe des X entre le point origine et un point
situé à sa droite, à la distance scène égale à la dimension du carré ; le résultat est un
nombre entier donnant la distance en pixels. Attention : ceci ne marche que s'il n'y
pas de rotation sur la vue, ce qui est le cas ici.
On a à présent une classe PanneauInfo prête à l'emploi. On l'instancie comme enfant de
VueMosaiQ : elle apparaîtra donc au-dessus de cette vue, toujours à la même position
relative. Voici les changements à faire dans la classe VueMosaiQ :
…
class VueMosaiQ(QGraphicsView):
def __init__(self,scene):
…
self.panneauInfo = PanneauInfo(self,scene)
self.panneauInfo.move(20,20) self.panneauInfo.setVisible(False) def
zoom(self,facteur): … self.scene().changed.emit(None) def
keyPressEvent(self,keyEvent): … elif key == Qt.Key_F1:
self.panneauInfo.setVisible(not self.panneauInfo.isVisible()) …
On crée le panneau en tant qu'enfant de la vue ; on lui passe la scène en argument,
comme requis par le constructeur.
257
(voir ) ; comme CarreMosaiQ ne connaît que les coordonnées scène, on passe en
argument la vue pour laquelle on veut obtenir la taille.
Une fois qu'on a les trois informations bien formatées dans des chaînes de
caractères, on les affiche dans les QLabel correspondants. Idéalement, on aurait pu
créer trois QLabel supplémentaires avec les parties statiques des messages ; nous
ne l'avons pas fait pour ne pas compliquer l'exemple (besoin de layouts
supplémentaires).
C'est comme cela qu'on récupère la taille du carré dans le repère de la scène ; la
valeur obtenue est celle de l'argument c passé au constructeur.
Pour calculer la taille du carré en unités vue (pixels), on utilise la méthode
mapFromScene pour faire des conversions de coordonnées scène en coordonnées
vue ; on mesure la distance vue sur l'axe des X entre le point origine et un point
situé à sa droite, à la distance scène égale à la dimension du carré ; le résultat est un
nombre entier donnant la distance en pixels. Attention : ceci ne marche que s'il n'y
pas de rotation sur la vue, ce qui est le cas ici.
On a à présent une classe PanneauInfo prête à l'emploi. On l'instancie comme enfant de
VueMosaiQ : elle apparaîtra donc au-dessus de cette vue, toujours à la même position
relative. Voici les changements à faire dans la classe VueMosaiQ :
…
class VueMosaiQ(QGraphicsView):
def __init__(self,scene):
…
self.panneauInfo = PanneauInfo(self,scene)
self.panneauInfo.move(20,20) self.panneauInfo.setVisible(False) def
zoom(self,facteur): … self.scene().changed.emit(None) def
keyPressEvent(self,keyEvent): … elif key == Qt.Key_F1:
self.panneauInfo.setVisible(not self.panneauInfo.isVisible()) …
On crée le panneau en tant qu'enfant de la vue ; on lui passe la scène en argument,
comme requis par le constructeur.
257
