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.
Qt ajoute ces propriétés au C++ :
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 le système de méta-objets fourni par 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++, 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 « Pourquoi Qt n'utilise pas les templates pour les signaux et les slots ? ».
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. |
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.
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 leur constructeur de copie et leur opérateur d'assignement désactivés.
Merci à <!zamnell!> pour la traduction et à <!wachter!> ainsi qu’à <!dourouc!> pour leur relecture orthographique !