===== Le modèle objet de Qt ===== Le modèle objet standard du C++ fournit un support d'exécution très efficace pour le paradigme objet. Mais sa nature statique est inflexible dans certains domaines de problème. La programmation d'interfaces utilisateur graphiques est un domaine qui requiert une efficacité d'exécution et un haut niveau de flexibilité. Qt fournit cela, en combinant la rapidité du C++ à la flexibilité de son modèle objet. ==== Introduction ==== Qt ajoute ces propriétés au C++ : * Un mécanisme très puissant pour la communication entre objets sans lien appelé [[signalsandslots|signaux et slots]] ; * Des [[properties|propriétés d'objet]] pouvant être conçues et être cibles de requêtes ; * Des [[eventsandfilters|évènements et des filtres d'évènements]] puissants ; * Une [[i18n|traduction de chaînes de caractères pour l'internationalisation]] ; * Des [[timers|compteurs]] internes qui rendent possible l'intégration élégante d'un bon nombre de tâches dans un évènement de GUI ; * Des [[objecttrees|arbres d'objets hiérarchiques]] pouvant être cible de requêtes qui organisent la propriété des objets dans une voie normale ; * Des pointeurs sécurisés ([[QPointer]]) qui sont définis automatiquement à 0 quand l'objet référencé est détruit, à la différence des pointeurs normaux du C++ qui deviennent des pointeurs instables lorsque leurs objets sont détruits ; * Une [[metaobjects#qobjectcast|conversion de type dynamique]] qui travaille à travers les limites des bibliothèques. Plusieurs de ces dispositifs de Qt sont implémentés avec des techniques de C++ standard, basés sur l'héritage depuis [[QObject]]. D'autres, comme le mécanisme de communication entre les objets et le système de propriétés dynamiques, requièrent [[metaobjects|le système de méta-objets]] fourni par [[moc#moc|le compilateur de méta-objets (moc)]] propre à Qt. Le système de méta-objets est une extension du C++ qui rend le langage mieux conditionné à la véritable programmation de composants de GUI. Bien que les templates puissent être utilisées pour étendre le C++, [[metaobjects|le système de méta-objets]] fournit des bénéfices par l'utilisation du C++ standard qui ne peut être réalisé avec des templates ; pour plus de détails, regardez « [[templates|Pourquoi Qt n'utilise pas les templates pour les signaux et les slots ?]] ». ==== Classes importantes ==== | [[QMetaClassInfo]] | Informations additionnelles à propos d'une classe. | | [[QMetaEnum]] | Métadonnées à propos d'un énumérateur. | | [[QMetaMethod]] | Métadonnées à propos d'une fonction membre. | | [[QMetaObject]] | Contient des méta-informations à propos des objets de Qt. | | [[QMetaProperty]] | Métadonnées à propos d'une propriété. | | [[QMetaType]] | Gère les types nommés dans le système de méta-objets. | | [[QObject]] | La classe de base de tous les objets de Qt. | | [[QObjectCleanupHandler]] | Surveille la période de vie d'une multitude de [[QObject]]. | | [[QPointer]] | Classe template fournissant des pointeurs sécurisés à [[QObject]]. | | [[QSignalMapper]] | Lot de signaux en provenance d'expéditeurs identifiables. | | [[QVariant]] | Agit comme une union pour la plupart des types communs de données de Qt. | ==== Objets de Qt : identité contre valeur ==== Quelques-uns des utilitaires ajoutés listés ci-dessus pour le modèle objet de Qt, nécessitent que nous considérions les objets de Qt telles des identités, non comme des valeurs. Les valeurs sont copiées et assignées ; les identités sont clonées. Le clonage entend la création d'une nouvelle identité, et non une exacte copie de l'ancienne. Par exemple, des jumeaux ont des identités différentes. Ils peuvent se ressembler, mais ont des noms différents, des positions différentes, et peuvent avoir des réseaux sociaux complètement différents. Ainsi, le clonage d'une identité est une opération plus complexe que la copie ou l'assignation d'une valeur. Nous pouvons voir ce que cela représente dans le modèle objet de Qt. ==== Un objet de Qt... ==== * Peut avoir un [[qobject#objectName-prop|QObject::objectName()]] unique. Si nous copions un objet de Qt, quel nom devrions-nous donner à la copie ? * A une place dans une [[objecttrees|hiérarchie objet]]. Si nous copions un objet de Qt, où devrait-il être placé ? * Peut être connecté à d'autres objets de Qt pour leur émettre des signaux ou pour en recevoir d'eux. Si nous copions un objet de Qt, comment devrions-nous transférer ces connexions à la copie ? * Peut avoir de [[properties|nouvelles propriétés]] ajoutées lors de l'exécution qui ne seraient pas déclarées dans la classe C++. Si nous copions un objet de Qt, la copie devrait-elle inclure les propriétés qui auraient été ajoutées à l'original ? Pour ces raisons, les objets de Qt devraient être traités comme des identités, non comme des valeurs. Les identités sont clonées, et non copiées ou assignées, et cloner une identité est une opération plus complexe que copier ou assigner une valeur. Par conséquent, QObject et la totalité de ses sous-classes (directes ou non) détiennent [[qobject#no-copy-constructor|leur constructeur de copie et leur opérateur d'assignement désactivés]]. ==== Remerciements ==== Merci à pour la traduction et à ainsi qu'à pour leur relecture orthographique !