Modèle d'objet
Le modèle d’objet standard du C++ offre une prise en charge très efficace du paradigme objet en temps d’exécution. Cependant, sa nature statique manque de souplesse dans certains domaines d’application. La programmation d’interfaces utilisateur graphiques est un domaine qui exige à la fois de l’efficacité en temps d’exécution et un haut niveau de flexibilité. Qt répond à ces exigences en combinant la rapidité du C++ et la flexibilité du modèle d’objet Qt.
Qt ajoute les fonctionnalités suivantes au C++ :
- un mécanisme très puissant permettant une communication transparente entre objets, appelé « signaux et slots »
- des propriétés d’objets consultables et personnalisables
- des événements et des filtres d'événements puissants
- une traduction contextuelle des chaînes de caractères pour l'internationalisation
- des minuteries sophistiquées pilotées par intervalles qui permettent d’intégrer avec élégance de nombreuses tâches dans une interface graphique pilotée par les événements
- des arborescences d'objets hiérarchiques et interrogeables qui organisent la propriété des objets de manière naturelle
- des pointeurs protégé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 transtypage dynamique fonctionnant au-delà des limites des bibliothèques
- la prise en charge de la création de types personnalisés.
Bon nombre de ces fonctionnalités de Qt sont implémentées à l’aide de techniques C++ standard, basées sur l’héritage de QObject. D’autres, comme le mécanisme de communication entre objets et le système de propriétés dynamiques, nécessitent le système de méta-objets fourni par le générateur de code de Qt (Meta-Object Compiler, moc).
Le système de méta-objets est une extension du C++ qui rend le langage mieux adapté à la programmation d’interfaces graphiques véritablement orientées composants.
Classes importantes
Ces classes constituent la base du modèle d'objets Qt.
Permet un accès avec effacement de type aux conteneurs associatifs | |
Informations supplémentaires sur une classe | |
Fonctionnalités communes aux conteneurs séquentiels et associatifs | |
Métadonnées concernant un énumérateur | |
Métadonnées concernant une fonction membre | |
Contient des méta-informations sur les objets Qt | |
Métadonnées concernant une propriété | |
Permet un accès sans spécification de type aux conteneurs séquentiels | |
Gère les types nommés dans le système de méta-objets | |
La classe de base de tous les objets Qt | |
Surveille la durée de vie de plusieurs QObjects | |
Classe de modèle fournissant des pointeurs protégés vers QObject | |
Enveloppe sans risque d’exception autour de QObject::blockSignals() | |
Regroupe les signaux provenant d'émetteurs identifiables | |
Fonctionne comme une union pour les types de données Qt les plus courants |
Objets Qt : identité vs valeur
Certaines des fonctionnalités ajoutées ci-dessus pour le modèle d’objets Qt exigent que l’on considère 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, des jumeaux ont des identités différentes. Ils peuvent avoir une apparence identique, mais ils ont des noms différents, vivent à des endroits différents et peuvent avoir 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’affectation d’une valeur. Nous pouvons voir ce que cela signifie dans le modèle d’objets Qt.
Un objet Qt…
- peut avoir une méthode ` QObject::objectName()` unique. Si l’on copie un objet Qt, quel nom doit-on donner à la copie ?
- occupe une place dans une hiérarchie d'objets. Si l'on copie un objet Qt, où la copie doit-elle être placée ?
- peut être connecté à d'autres objets Qt afin de leur envoyer des signaux ou de recevoir les signaux qu'ils émettent. Si l'on copie un objet Qt, comment doit-on transférer ces connexions vers la copie ?
- peut se voir ajouter, lors de l’exécution, de nouvelles propriétés qui ne sont pas déclarées dans la classe C++. Si l’on copie 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, l’opérateur de copie ( QObject ) et toutes les sous-classes de ` QObject ` (directes ou indirectes) ont leur opérateur de copie ( 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.