Le syst�me de m�ta-objetsLe syst�me de m�ta-objets fournit le m�chanisme de signaux et slots pour la communication entre les objets, les informations de type en cours d'ex�cution et le syst�me de propri�t�s dynamiques. Le syst�me de m�ta-objets est bas� sur trois choses : la classe QObject, qui fournit une classe de base pour les objets pouvant tirer un avantage du syst�me de m�ta-objets ; la macro Q_OBJECT, � l'int�rieur de la section priv�e de la d�claration de classe, qui est utilis�e pour activer les dispositifs des m�ta-objets, comme les propri�t�s dynamiques, les signaux et les slots ; le compilateur de m�ta-objets (moc), qui munit chaque sous-classe de QObject du code n�cessaire � l'impl�mentation des dispositifs des m�ta-objets. Le fonctionnement du syst�me de m�ta-objetsL'outil moc lit un fichier source C++. S'il trouve une d�claration de classe ou plus qui contient la macro Q_OBJECT, il produit un autre fichier source C++ contenant le code de m�ta-objet pour chacune de ces classes. Ce fichier source g�n�r� est soit inclus dans le fichier source de la classe, soit, plus commun�ment, compil� et joint avec l'impl�mentation de la classe. En plus de fournir le m�canisme de signaux et de slots pour la communication entre les objets (la raison principale d'introduction du syst�me), le code de m�ta-objet fournit les dispositifs suivants :
Il est aussi possible de rendre plus performantes les conversions de types dynamiques en utilisant qobject_cast() sur les classes d�rivant de QObject. La fonction qobject_cast() se comporte de mani�re similaire au dynamic_cast() du C++ standard, avec pour avantage de ne pas avoir besoin du support RTTI et de fonctionner � travers les limites des biblioth�ques. Il tente de convertir son argument vers le type de pointeurs sp�cifi� entre les chevrons (< et >), retournant un pointeur non nul si l'objet est du type correct (d�termin� lors de l'ex�cution), ou 0 si le type de l'objet est incompatible. Par exemple, admettons que MyWidget, d�clar� avec la macro Q_OBJECT, h�rite de QWidget : QObject *obj = new MyWidget; La variable obj, de type QObject *, se r�f�re actuellement � un MyWidget, donc peut �tre convertie convenablement : QWidget *widget = qobject_cast<QWidget *>(obj); La conversion de QObject � QWidget est faite avec succ�s car l'objet est actuellement un MyWidget, qui est une sous-classe de QWidget. Depuis que nous savons que obj est un MyWidget, nous pouvons aussi le convertir en MyWidget * : MyWidget *myWidget = qobject_cast<MyWidget *>(obj); La conversion de type vers MyWidget est un succ�s car qobject_cast() ne fait pas de distinction entre les types inclus avec Qt et les types personnalis�s. QLabel *label = qobject_cast<QLabel *>(obj); // label est � 0 La conversion vers QLabel, d'autre part, �choue. Le pointeur est alors d�fini � 0. Cela rend possible la gestion des objets de diff�rents types lors de l'ex�cution bas�e sur le type : if (QLabel *label = qobject_cast<QLabel *>(obj)) { label->setText(tr("Ping")); } else if (QPushButton *button = qobject_cast<QPushButton *>(obj)) { button->setText(tr("Pong!")); } Il est possible d'utiliser QObject en tant que classe de base sans la macro Q_OBJECT ni le code de m�ta-objets, mais ni les signaux ni les slots ni tout autre dispositif d�crit ici ne sera disponible si la macro n'est pas utilis�e. Depuis le point de vue du syst�me de m�ta-objets, une sous-classe de QObject sans code m�ta est l'�quivalent de son anc�tre le plus proche qui poss�de un code de m�ta-objets. Cela signifie par exemple que QMetaObject::className() ne retournera pas le nom actuel de votre classe mais celui de son anc�tre. Par cons�quent, nous recommandons fortement que toutes les sous-classes de QObject utilisent la macro Q_OBJECT sans pr�ter attention au fait qu'elles utilisent ou non les signaux, les slots et les propri�t�s. Voir aussi QMetaObject, Le syst�me de propri�t�s de Qt et Les signaux et les slots. RemerciementsMerci � <!zamnell!> pour la traduction ainsi qu'� <!dourouc!> et � <!jacques_jean!> pour leur relecture ! |
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 © 2025 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 ? Un bug ? 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 ! |