Developpez.com - Qt
X

Choisissez d'abord la catégorieensuite la rubrique :

Viadeo Twitter Facebook Share on Google+   
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

Le modèle objet de Qt

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.

Introduction

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 ? ».

Classes importantes

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.

Objets de Qt : identité contre valeur

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.

Un objet de Qt...

  • Peut avoir un QObject::objectName() unique. Si nous copions un objet de Qt, quel nom devrions-nous donner à la copie ?
  • A une place dans une hiérarchie objet. Si nous copions un objet de Qt, où devrait-il être placé ?
  • Peut être connecté à d'autres objets de Qt pour leur émettre des signaux ou pour en recevoir d'eux. Si nous copions un objet de Qt, comment devrions-nous transférer ces connexions à la copie ?
  • Peut avoir de nouvelles propriétés ajoutées lors de l'exécution qui ne seraient pas déclarées dans la classe C++. Si nous copions un objet de Qt, la copie devrait-elle inclure les propriétés qui auraient été ajoutées à l'original ?

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.

Remerciements

Merci à Louis du Verdier pour la traduction et à Wachter ainsi qu'à Thibaut Cuvelier pour leur relecture orthographique !

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 4.7
Copyright © 2017 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur, une redirection cassée ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
Responsable bénévole de la rubrique Qt : Thibaut Cuvelier -