Modèle d'objet
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. La programmation d'interfaces graphiques est un domaine qui nécessite à la fois une efficacité d'exécution et un haut niveau de flexibilité. Qt fournit cela, en combinant la vitesse de C++ avec la flexibilité du modèle d'objet de Qt.
Qt ajoute ces caractéristiques au C++ :
- un mécanisme très puissant pour une communication transparente entre les objets, appelé " signaux" et "emplacements" (slots)
- des propriétés d'objets interrogeables et concevables
- de puissants événements et filtres d'événements
- la traduction contextuelle des chaînes de caractères pour l'internationalisation
- des minuteries sophistiquées pilotées par intervalles qui permettent d'intégrer élégamment de nombreuses tâches dans une interface graphique pilotée par événements
- des arbres d'objets hiérarchiques et interrogeables qui organisent la propriété des objets de manière naturelle
- des pointeurs gardés (QPointer) qui sont automatiquement mis à 0 lorsque l'objet référencé est détruit, contrairement aux pointeurs C++ normaux qui deviennent des pointeurs pendants lorsque leurs objets sont détruits
- un cast dynamique qui fonctionne au-delà des limites de la bibliothèque.
- la prise en charge de la création de types personnalisés.
Beaucoup de ces caractéristiques de Qt XML sont implémentées avec des techniques C++ standard, basées sur l'héritage de QObject. D'autres, comme le mécanisme de communication d'objets et le système de propriétés dynamiques, nécessitent le système de méta-objets fourni par le siteMeta-Object Compiler (moc) de Qt.
Le système de méta-objets est une extension du C++ qui rend le langage mieux adapté à la programmation d'une véritable interface graphique à composants.
Classes importantes
Ces classes constituent la base du modèle d'objet de Qt.
Permet l'accès par effacement de type aux conteneurs associatifs | |
Informations supplémentaires sur une classe | |
Fonctionnalité commune aux conteneurs séquentiels et associatifs | |
Méta-données sur un énumérateur | |
Méta-données sur une fonction membre | |
Contient des méta-informations sur les objets Qt | |
Méta-données sur une propriété | |
Permet l'accès par type effacé aux conteneurs séquentiels | |
Gère les types nommés dans le système de méta-objets | |
Classe de base de tous les objets Qt | |
Surveille la durée de vie de plusieurs QObjects | |
Classe modèle qui fournit des pointeurs gardés vers QObject | |
Enveloppe d'exception autour de QObject::blockSignals() | |
Regroupe les signaux provenant d'expéditeurs identifiables | |
Agit comme une union pour les types de données Qt les plus courants |
Objets Qt : Identité ou valeur
Certaines des fonctionnalités supplémentaires énumérées ci-dessus pour le modèle d'objet Qt exigent que nous considérions les objets Qt comme des identités, et non comme des valeurs. Les valeurs sont copiées ou assignées ; les identités sont clonées. Le clonage consiste à créer une nouvelle identité, et non une copie exacte de l'ancienne. Par exemple, les jumeaux ont des identités différentes. Ils peuvent avoir l'air identiques, mais ils ont des noms différents, des lieux différents et des réseaux sociaux complètement différents.
Le clonage d'une identité est donc une opération plus complexe que la copie ou l'attribution d'une valeur. Nous pouvons voir ce que cela signifie dans le modèle d'objet Qt.
Un objet Qt...
- peut avoir un nom unique QObject::objectName(). Si nous copions un objet Qt, quel nom devrions-nous donner à la copie ?
- Un objet Qt... a un emplacement dans une hiérarchie d'objets. Si nous copions un objet Qt, où doit se trouver la copie ?
- peut être connecté à d'autres objets Qt afin de leur envoyer des signaux ou de recevoir des signaux émis par eux. Si nous copions un objet Qt, comment devons-nous transférer ces connexions à la copie ?
- Un objet Qt peut se voir ajouter de nouvelles propriétés à l'exécution qui ne sont pas déclarées dans la classe C++. Si nous copions un objet Qt, la copie doit-elle inclure les propriétés qui ont été ajoutées à l'original ?
Pour ces raisons, les objets Qt doivent être traités comme des identités et non comme des valeurs. Les identités sont clonées, et non copiées ou assignées, et le clonage d'une identité est une opération plus complexe que la copie ou l'assignation d'une valeur. Par conséquent, QObject et toutes les sous-classes de QObject (directes ou indirectes) ont leur copy constructor and assignment operator désactivé.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.