Sur cette page

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++ :

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.

QMetaAssociation

Permet un accès avec effacement de type aux conteneurs associatifs

QMetaClassInfo

Informations supplémentaires sur une classe

QMetaContainer

Fonctionnalités communes aux conteneurs séquentiels et associatifs

QMetaEnum

Métadonnées concernant un énumérateur

QMetaMethod

Métadonnées concernant une fonction membre

QMetaObject

Contient des méta-informations sur les objets Qt

QMetaProperty

Métadonnées concernant une propriété

QMetaSequence

Permet un accès sans spécification de type aux conteneurs séquentiels

QMetaType

Gère les types nommés dans le système de méta-objets

QObject

La classe de base de tous les objets Qt

QObjectCleanupHandler

Surveille la durée de vie de plusieurs QObjects

QPointer

Classe de modèle fournissant des pointeurs protégés vers QObject

QSignalBlocker

Enveloppe sans risque d’exception autour de QObject::blockSignals()

QSignalMapper

Regroupe les signaux provenant d'émetteurs identifiables

QVariant

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.