Comme on n'a pas un événement clavier ici (QKeyEvent), on utilise la méthode
statique QApplication.keyboardModifiers, qui permet à n'importe quelle
méthode de connaître l'état courant des touches spéciales du clavier ; ici, on teste
que la touche Ctrl est enfoncée à l'instant précis du mouvement du pointeur. Si c'est
le cas, on continue le traitement.
Il faut déterminer si le pointeur survole actuellement un élément et, si oui, retrouver
cet élément. Ceci est nécessaire car on est ici dans la classe vue (VueMosaiQ), pas
dans la classe élément (CarreMosaiQ). La méthode itemAt héritée de
QGraphicsView renvoie l'élément présent aux coordonnées vue données ou None si
aucun élément n'est présent à ces coordonnées. On lui passe la position de
l'événement QMouseEvent reçu, qui est bien une position en coordonnées vue.
Il reste à tester qu'on survole bien un élément et qu'on a bien un carré fragmentable,
c'est-à-dire une instance de CarreMosaiQ. Si oui, on fragmente cette instance !
Notons que, dans notre application actuelle, la deuxième partie du test est inutile,
car on n'a pas d'autres éléments sur la scène ; il est cependant prudent de laisser ce
contrôle pour se protéger lors des évolutions futures (programmation défensive).
Une fois cette méthode ajoutée, vous pouvez commencer à piler les carrés en petits
morceaux, de manière industrielle ! Vous pouvez ainsi dessiner avec une sorte de
pinceau magique et cacher, si le cœur vous en dit, des messages subliminaux seulement
visibles en zoomant…
Figure 12.6 : MosaiQ v0.4 (fragmentation continue)
251
Précédent

- 252/494

Suivant