Sur cette page

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

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.

QMetaAssociation

Permet l'accès par effacement de type aux conteneurs associatifs

QMetaClassInfo

Informations supplémentaires sur une classe

QMetaContainer

Fonctionnalité commune aux conteneurs séquentiels et associatifs

QMetaEnum

Méta-données sur un énumérateur

QMetaMethod

Méta-données sur une fonction membre

QMetaObject

Contient des méta-informations sur les objets Qt

QMetaProperty

Méta-données sur une propriété

QMetaSequence

Permet l'accès par type effacé aux conteneurs séquentiels

QMetaType

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

QObject

Classe de base de tous les objets Qt

QObjectCleanupHandler

Surveille la durée de vie de plusieurs QObjects

QPointer

Classe modèle qui fournit des pointeurs gardés vers QObject

QSignalBlocker

Enveloppe d'exception autour de QObject::blockSignals()

QSignalMapper

Regroupe les signaux provenant d'expéditeurs identifiables

QVariant

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.