Les dimensions des éléments sont définies dans des variables pour pouvoir
facilement les ajuster.
Le smiley est défini par un QGraphicsEllipseItem, de dimension d × d, un cercle
donc. Attention, les deux premiers arguments n'indiquent pas le centre du cercle
mais le coin supérieur gauche du carré qui l'entoure. Le fait d'indiquer les
coordonnées (-d/2,-d/2) est un artifice classique pour faire en sorte que le centre
du cercle soit aux coordonnées (0,0) de cet élément. Ceci va faciliter le
positionnement symétrique des deux éléments yeux.
Les yeux sont définis par deux QGraphicsEllipseItem, qui ont pour parent l'élément
smiley défini. Comme ils ont tous deux des dimensions égales, on les crée — par
facilité — via une liste en compréhension Python qui fait exactement la même
création deux fois. Leur dimension est ox × oy, avec le centre en (0,0) en utilisant
l'artifice vu au point . À ce stade, les deux yeux sont superposés au centre du
cercle smiley (ce qui le ferait donc apparaître comme un cyclope !).
On positionne l'œil gauche (yeux[0]) et l'œil droit (yeux[1]) dans le repère de
l'élément parent smiley. En changeant simplement le signe des coordonnées X, on
positionne les deux yeux parfaitement symétriquement, puisque le centre de ce
repère est le centre de smiley.
On colorie les yeux à l'aide d'une brosse noire. Comme les boucles en Python sont
très simples à écrire, il ne faut pas se priver de factoriser les propriétés communes
à plusieurs éléments.
On positionne le centre de smiley au centre du rectangle ; on utilise mapToScene
pour obtenir les coordonnées scène à partir des coordonnées relatives au rectangle.
Notons que cette instruction déplace automatiquement les deux yeux, car éléments
fils de smiley. Le smiley est donc bien un élément composé qu'on peut manipuler
comme un tout sans se soucier de ses constituants.
Pour obtenir un affichage plus agréable, il est conseillé d'activer l'anticrénelage sur la
vue ; ceci a pour effet de lisser les traits, en atténuant l'effet d'escalier.
204
facilement les ajuster.
Le smiley est défini par un QGraphicsEllipseItem, de dimension d × d, un cercle
donc. Attention, les deux premiers arguments n'indiquent pas le centre du cercle
mais le coin supérieur gauche du carré qui l'entoure. Le fait d'indiquer les
coordonnées (-d/2,-d/2) est un artifice classique pour faire en sorte que le centre
du cercle soit aux coordonnées (0,0) de cet élément. Ceci va faciliter le
positionnement symétrique des deux éléments yeux.
Les yeux sont définis par deux QGraphicsEllipseItem, qui ont pour parent l'élément
smiley défini. Comme ils ont tous deux des dimensions égales, on les crée — par
facilité — via une liste en compréhension Python qui fait exactement la même
création deux fois. Leur dimension est ox × oy, avec le centre en (0,0) en utilisant
l'artifice vu au point . À ce stade, les deux yeux sont superposés au centre du
cercle smiley (ce qui le ferait donc apparaître comme un cyclope !).
On positionne l'œil gauche (yeux[0]) et l'œil droit (yeux[1]) dans le repère de
l'élément parent smiley. En changeant simplement le signe des coordonnées X, on
positionne les deux yeux parfaitement symétriquement, puisque le centre de ce
repère est le centre de smiley.
On colorie les yeux à l'aide d'une brosse noire. Comme les boucles en Python sont
très simples à écrire, il ne faut pas se priver de factoriser les propriétés communes
à plusieurs éléments.
On positionne le centre de smiley au centre du rectangle ; on utilise mapToScene
pour obtenir les coordonnées scène à partir des coordonnées relatives au rectangle.
Notons que cette instruction déplace automatiquement les deux yeux, car éléments
fils de smiley. Le smiley est donc bien un élément composé qu'on peut manipuler
comme un tout sans se soucier de ses constituants.
Pour obtenir un affichage plus agréable, il est conseillé d'activer l'anticrénelage sur la
vue ; ceci a pour effet de lisser les traits, en atténuant l'effet d'escalier.
204
