un QGraphicsItem E peut être créé en spécifiant un QGraphicsItem P existant
comme étant son parent (c'est ce qui est fait dans la Figure 10.4);
la classe QGraphicsItemGroup, fille de QGraphicsItem, permet de grouper
des QGraphicsItem existants.
L'intérêt respectif des deux techniques n'est pas simple à expliquer sans avoir bien
compris les différents systèmes de coordonnées. Disons que la technique 1
convient bien quand l'assemblage est fixe et peut être défini à la création, par
exemple, le vaisseau spatial dans un jeu ; la technique 2, utilisant
QGraphicsItemGroup, est mieux adaptée pour les assemblages d'éléments déjà
présents sur la scène, par exemple pour fournir à l'utilisateur une fonction
grouper.
Parlons, pour terminer, de la superposition des éléments sur la scène. Ceci n'est pas
anodin : outre l'effet visuel, la superposition d'éléments peut empêcher l'utilisateur de
cliquer sur l'élément qui l'intéresse, si occulté par un autre. Comme nous l'avons vu, les
QGraphicsItem sont placés sur la scène un par un, typiquement grâce à une boucle qui
invoque la méthode addItem. Assez logiquement, lorsque la scène est dessinée sur une
vue donnée, les derniers éléments ajoutés vont se dessiner au-dessus des éléments déjà
présents sur la scène ; si les éléments sont opaques, ils vont occulter ceux qui sont en
dessous d'eux, partiellement ou totalement. Toutefois, pour les besoins de l'application,
le programmeur peut changer cet empilement par défaut en invoquant la méthode
setZValue(z) sur le QGraphicsItem de son choix, où z est un nombre à virgule
flottante positif ou négatif. En fait, même si on fait ici du dessin 2D avec coordonnées
XY, chaque élément a une coordonnée Z cachée qui vaut zéro par défaut. Son rôle est
simple à comprendre : un élément ayant une valeur Z donnée va toujours s'afficher au
dessus de tout élément ayant un Z inférieur ; quand des éléments ont la même valeur Z,
on se rabat sur l'ordre d'insertion dans la scène comme expliqué plus haut. Ainsi par
exemple, quand on clique sur un élément partiellement occulté par d'autres, on peut
mettre en avant cet élément en faisant setZValue(zmax+1) où zmax est le Z maximum
de la scène (attribut à gérer par le programmeur).
2.3. Classe QGraphicsView
La classe QGraphicsView a pour rôle d'afficher une scène donnée à l'écran. Plus
précisément, on va indiquer à l'instance de QGraphcsView (généralement à sa création)
une certaine scène, instance de QGraphicsScene. La vue a dès lors pour mandat
d'afficher à l'écran tout ou partie de la scène dans une zone rectangulaire appelée zone
186
Précédent

- 187/494

Suivant