1. Gestion des événements par patron de
méthode
Avant de nous lancer dans le développement de MosaiQ, il est nécessaire de présenter
les principes de la technique qu'on va utiliser. On va utiliser un patron de conception
omniprésent dans les frameworks orientés objet : le patron de méthode (en anglais
template method). L'idée est assez simple à comprendre : quand un événement
utilisateur se produit sur une vue donnée (déplacement souris, clic, touche clavier,
etc.), le framework appelle une méthode de QGraphicsView spécifique au type
d'événement ; cette méthode implémente un comportement par défaut ou même, souvent,
ne fait rien. Si l'on crée une classe qui hérite de QGraphicsView, on peut dès lors
redéfinir (ou, plus précisément, surcharger) certaines de ces méthodes pour obtenir un
certain comportement. Voici quelques exemples de telles méthodes :
keyPressEvent : une touche clavier a été enfoncée ;
keyReleaseEvent : une touche clavier a été relâchée ;
mouseMoveEvent : la souris a été déplacée ;
mousePressEvent : un bouton de la souris a été enfoncé ;
mouseReleaseEvent : un bouton de la souris a été relâché ;
mouseDoubleClickEvent : un double-clic a été fait sur un bouton de la souris ;
wheelEvent : la molette de la souris a été déplacée.
Note > En C++, les méthodes qu'on peut surcharger sont dites virtuelles ; leurs
signatures sont marquées du mot clé virtual. Dans la documentation Qt C++, ces
méthodes sont regroupées dans la section Protected Functions de chaque classe. En
Python, qui est un langage beaucoup moins contraint, il n'y a pas ce genre de
distinction et l'on pourrait dire en fait que toutes les méthodes sont virtuelles. Pour
cette raison, afin de déterminer quelles méthodes peuvent être surchargées et quels
sont leurs rôles respectifs, il peut être utile de se référer à la documentation Qt C++
plutôt qu'à celle de PyQt. Toutes ces méthodes ont un argument d'une classe qui
hérite de la classe abstraite QEvent (QKeyEvent, QMoveEvent, QMouseEvent, etc.) ;
cet argument fournit toutes les informations sur l'événement qui s'est produit :
230
méthode
Avant de nous lancer dans le développement de MosaiQ, il est nécessaire de présenter
les principes de la technique qu'on va utiliser. On va utiliser un patron de conception
omniprésent dans les frameworks orientés objet : le patron de méthode (en anglais
template method). L'idée est assez simple à comprendre : quand un événement
utilisateur se produit sur une vue donnée (déplacement souris, clic, touche clavier,
etc.), le framework appelle une méthode de QGraphicsView spécifique au type
d'événement ; cette méthode implémente un comportement par défaut ou même, souvent,
ne fait rien. Si l'on crée une classe qui hérite de QGraphicsView, on peut dès lors
redéfinir (ou, plus précisément, surcharger) certaines de ces méthodes pour obtenir un
certain comportement. Voici quelques exemples de telles méthodes :
keyPressEvent : une touche clavier a été enfoncée ;
keyReleaseEvent : une touche clavier a été relâchée ;
mouseMoveEvent : la souris a été déplacée ;
mousePressEvent : un bouton de la souris a été enfoncé ;
mouseReleaseEvent : un bouton de la souris a été relâché ;
mouseDoubleClickEvent : un double-clic a été fait sur un bouton de la souris ;
wheelEvent : la molette de la souris a été déplacée.
Note > En C++, les méthodes qu'on peut surcharger sont dites virtuelles ; leurs
signatures sont marquées du mot clé virtual. Dans la documentation Qt C++, ces
méthodes sont regroupées dans la section Protected Functions de chaque classe. En
Python, qui est un langage beaucoup moins contraint, il n'y a pas ce genre de
distinction et l'on pourrait dire en fait que toutes les méthodes sont virtuelles. Pour
cette raison, afin de déterminer quelles méthodes peuvent être surchargées et quels
sont leurs rôles respectifs, il peut être utile de se référer à la documentation Qt C++
plutôt qu'à celle de PyQt. Toutes ces méthodes ont un argument d'une classe qui
hérite de la classe abstraite QEvent (QKeyEvent, QMoveEvent, QMouseEvent, etc.) ;
cet argument fournit toutes les informations sur l'événement qui s'est produit :
230
