2. Interface d'un composant et propriétés
En faisant hériter un composant d'un autre, toute l'interface publique de ce dernier
devient disponible. Ainsi, dans l'exemple BiblioApp, on a pu récupérer facilement la
propriété title de ApplicationWindow. Cependant, si l'on veut redistribuer le
composant, cette manière de procéder n'est pas très propre : l'interface accessible n'est
pas celle que vous avez définie, elle n'a donc pas forcément du sens pour le composant
exposé (même si elle en a pour le composant dont il hérite). La solution est alors de
dériver d'Item, puisque ce composant ne définit pas d'interface (outre le strict minimum
pour l'affichage) : on peut alors définir soi-même les propriétés faisant partie de
l'interface que l'on souhaite exposer.
Une nouvelle propriété est définie à l'aide du mot clé property, suivi du type de la
propriété [23] : les principaux types sont int pour un entier, string pour une chaîne de
caractères, bool pour une valeur binaire vraie ou fausse, ainsi que var pour un type
indéfini (pour la liste complète, voir la documentation). Ensuite vient le nom attribué à
la propriété. En quatrième lieu, mais de manière optionnelle, on peut également fournir
une valeur par défaut après le symbole :.
property type nom [: valeur par défaut]
Pour le composant BiblioApp, afin de faciliter la réutilisation du composant dans une
interface plus grande, les modèles (qui stockent les livres et les genres) devraient être
fournis par l'utilisateur du composant BiblioApp. Pour ce faire, on peut définir deux
propriétés dans ce composant.
Note > Le code source de cet exemple et les fichiers d'éléments associés sont
disponibles dans le projet 2-biblioapp-proprietes .
ApplicationWindow {
id: window
property var genreModel
property var bookModel
// …
}
Les noms de ces propriétés correspondent aux identifiants précédents : il ne sera pas
nécessaire d'adapter le code, il fera automatiquement référence à ces propriétés (les
identifiants n'existant plus). Du côté utilisateur, dans le fichier main.qml, il faudra
spécifier les deux modèles :
373
Précédent

- 374/494

Suivant