que QGraphicsRectItem pour définir précisément des interactions avec
l'utilisateur, c'est-à-dire ce qu'il doit se passer quand on clique sur l'élément,
quand le pointeur le survole, etc ; on hérite des méthodes de dessin prédéfinies
dans PyQt, mais on surcharge les méthodes liées aux interactions utilisateur. Par
ailleurs, il est aussi possible de créer de nouvelles classes qui héritent
directement de QGraphicsItem. Il faut alors au minimum indiquer comment elles
doivent se dessiner ; pour ce faire, il y a deux méthodes à implémenter (plus
précisément, à surcharger) : boundedRect() et paint(). Notons que le premier
mode d'héritage cité (à partir d'une classe fille de QGraphicsItem) est très
fréquent dans les applications utilisant le framework ; nous allons d'ailleurs
l'utiliser dans notre application d'exemple. Le second mode d'héritage
(directement de QGraphicsItem) est réservé à un usage avancé permettant
notamment d'utiliser directement la classe QPainter, c'est-à-dire la couche
graphique bas niveau utilisée par le framework.
Composition de QGraphicsItem — il est possible de grouper des éléments
QGraphicsItem pour les manipuler tous ensemble, comme un seul élément. On
pourrait par exemple définir un élément VaisseauSpatial en assemblant un
QGraphicsPolygonItem pour la coque et deux QGraphicsRectItem pour les
réacteurs (voir la Figure 10.4) ; il suffit alors d'une seule instruction pour déplacer
cet élément sur la scène ou lui faire subir des rotations.
Figure 10.4 : Composition de QGraphicsItem
Ce mode de groupement est récursif : une instance qui groupe plusieurs éléments
peut être elle-même groupée dans un élément de plus haut niveau et ainsi de suite.
On peut ainsi définir des éléments graphiques complexes selon une arborescence
dont les éléments feuilles sont les formes géométriques simples fournies par le
framework. Deux techniques distinctes sont possibles pour réaliser ces
assemblages :
185
l'utilisateur, c'est-à-dire ce qu'il doit se passer quand on clique sur l'élément,
quand le pointeur le survole, etc ; on hérite des méthodes de dessin prédéfinies
dans PyQt, mais on surcharge les méthodes liées aux interactions utilisateur. Par
ailleurs, il est aussi possible de créer de nouvelles classes qui héritent
directement de QGraphicsItem. Il faut alors au minimum indiquer comment elles
doivent se dessiner ; pour ce faire, il y a deux méthodes à implémenter (plus
précisément, à surcharger) : boundedRect() et paint(). Notons que le premier
mode d'héritage cité (à partir d'une classe fille de QGraphicsItem) est très
fréquent dans les applications utilisant le framework ; nous allons d'ailleurs
l'utiliser dans notre application d'exemple. Le second mode d'héritage
(directement de QGraphicsItem) est réservé à un usage avancé permettant
notamment d'utiliser directement la classe QPainter, c'est-à-dire la couche
graphique bas niveau utilisée par le framework.
Composition de QGraphicsItem — il est possible de grouper des éléments
QGraphicsItem pour les manipuler tous ensemble, comme un seul élément. On
pourrait par exemple définir un élément VaisseauSpatial en assemblant un
QGraphicsPolygonItem pour la coque et deux QGraphicsRectItem pour les
réacteurs (voir la Figure 10.4) ; il suffit alors d'une seule instruction pour déplacer
cet élément sur la scène ou lui faire subir des rotations.
Figure 10.4 : Composition de QGraphicsItem
Ce mode de groupement est récursif : une instance qui groupe plusieurs éléments
peut être elle-même groupée dans un élément de plus haut niveau et ainsi de suite.
On peut ainsi définir des éléments graphiques complexes selon une arborescence
dont les éléments feuilles sont les formes géométriques simples fournies par le
framework. Deux techniques distinctes sont possibles pour réaliser ces
assemblages :
185
