8. Fragmentation continue
Revenons sur le mode de fragmentation des carrés de notre application. Nous avions
initialement annoncé qu'on allait démontrer qu'une scène pouvait facilement contenir
des dizaines de milliers d'éléments. Sachant que, à chaque clic, on ajoute quatre carrés
et on en supprime un, on a un résultat net de seulement trois carrés par clic. Pour éviter
des crampes au doigt, il est possible d'implémenter un nouveau mode de fragmentation
qui accélère considérablement le remplissage de la scène.
L'idée est d'introduire un mode de fonctionnement où l'on fragmente tout carré qu'on
survole avec le pointeur, sans qu'il y ait besoin de cliquer. Pour activer ce mode, on
demande à l'utilisateur de garder la touche Ctrl enfoncée. On pourra ainsi fragmenter
les carrés par simples déplacements de la souris.
Il existe plusieurs manières pour programmer cela. On pourrait par exemple changer
l'implémentation de CarreMosaiQ.hoverEnterEvent, en appelant
self.fragmente() si la touche Ctrl est enfoncée. Toutefois, ceci ne donnerait pas tout
à fait le résultat escompté : si on enfonce Ctrl alors que le pointeur est déjà au-dessus
d'un carré, ce carré ne serait pas fragmenté tant que le pointeur ne l'a pas quitté et ne l'a
pas survolé à nouveau.
Une meilleure technique, un rien plus compliquée, consiste à détecter les mouvements
du pointeur au niveau de la vue et à agir en conséquence. À cette fin, nous introduisons
une nouvelle méthode, mouseMoveEvent, qui sera appelée à chaque mouvement du
pointeur souris dans la vue ; l'argument de cette méthode est un QMouseEvent qui
donne notamment les coordonnées du pointeur dans la vue (méthode pos()) [17] . Voici
comment implémenter cette méthode :
…
class VueMosaiQ(QGraphicsView):
…
def mouseMoveEvent(self,mouseEvent):
QGraphicsView.mouseMoveEvent(self,mouseEvent)
if QApplication.keyboardModifiers() == Qt.ControlModifier: item =
self.itemAt(mouseEvent.pos()) if item is not None and
isinstance(item,CarreMosaiQ): item.fragmente()
On appelle la méthode parente pour ne pas casser le comportement par défaut.
250
Précédent

- 251/494

Suivant