De QObject aux méta-objets
Une plongée au coeur des fondations de Qt, le tutoriel de Louis du Verdier mis à jour
Le 2010-02-09 21:39:20, par Amnell, Rédacteur
Bonjour à tous,
Les fondations de Qt constituent un sujet intéressant dans le cadre de son apprentissage. Sur quoi s’appuie réellement le framework ? Quel est son modèle objet ? Dans la majorité des cas, les développeurs utilisant Qt pour développer des interfaces graphiques ne savent pas y répondre, et c’est pour cela que j’ai décidé de rédiger un article sur ces fondations.
Cet article a pour but de traiter de QObject jusqu’aux méta-objets pour permettre à tous de mieux comprendre sur quoi est véritablement fondé Qt. L’introspection, les propriétés, les signaux, les slots et les méta-objets constituent pour vous un domaine inexploré ? L’occasion est venue d'y remédier.
De QObject aux méta-objets, une plongée au cœur des fondations de Qt
Attendiez-vous un tel article ? Vous a-t-il aidé ? N’hésitez pas à commenter !
Les fondations de Qt constituent un sujet intéressant dans le cadre de son apprentissage. Sur quoi s’appuie réellement le framework ? Quel est son modèle objet ? Dans la majorité des cas, les développeurs utilisant Qt pour développer des interfaces graphiques ne savent pas y répondre, et c’est pour cela que j’ai décidé de rédiger un article sur ces fondations.
Cet article a pour but de traiter de QObject jusqu’aux méta-objets pour permettre à tous de mieux comprendre sur quoi est véritablement fondé Qt. L’introspection, les propriétés, les signaux, les slots et les méta-objets constituent pour vous un domaine inexploré ? L’occasion est venue d'y remédier.
De QObject aux méta-objets, une plongée au cœur des fondations de Qt
Attendiez-vous un tel article ? Vous a-t-il aidé ? N’hésitez pas à commenter !
-
Tu as fait un superbe article Amnell, Bravo !
Personnellement, tu m'as appris pas mal de chose, ce que je retiens surtout, c'est le système de méta-objets.
Bon maintenant, est ce que ça va vraiment m'être utile ? Pas tant que ça, ce sont juste des connaissances en plus.
Cependant, deux petites questions :
Quand on utilise le compilateur de méta-objets (moc), si notre classe définit des méthodes templates dans les fichiers d'en-tête, est ce qu'elles sont toujours valable ?
N'y aurait-t-il pas une erreur renvoyé par le compilateur C++, vu que ces méthodes "particulières" doivent être dans les en-têtes, et que le moc les transformes en fichiers avec l'extension .cpp ?
Merci pour cet article Amnell. Bonne continuation.le 19/02/2010 à 20:16 -
AmnellRédacteurSalut,
Tout d'abord, merci du commentaire.
Je vais à la suite répondre à tes deux questions :
Le moc n'empêche pas l'utilisation des templates (comment fonctionnerait QList, par exemple, si c'était le cas ?), mais prive une classe template des signaux et des slots. Je t'invite à consulter cette page pour avoir la liste complète des restrictions que cause le moc.
Depuis quand les fonctions template doivent-elle forcément être implémentées dans la déclaration de classe ? Ou peut-être parlais-tu d'autres fonctions ?le 19/02/2010 à 21:51 -
Je n'ai pas parlé des fonctions "globale" templates, encore moins des classes templates, mais des méthodes templates.
Elles doivent être entièrement définis (prototype + corp) dans l'en-tête.
Comme les fonctions templates tout cour, on ne les places pas dans les .cpple 19/02/2010 à 21:57 -
AmnellRédacteurUne déclaration de classe template avec dedans une méthode template (fichier header) :
Code : 1
2
3
4
5
6
7template <typename T> class MyClass { public: //... T method() const; };
Code : 1
2
3
4
5template<typename T> T MyClass<T>::method() const { // ... }
N'y aurait-t-il pas une erreur renvoyé par le compilateur C++, vu que ces méthodes "particulières" doivent être dans les en-têtes, et que le moc les transformes en fichiers avec l'extension .cpp ?
EDIT : Mais je pense qu'il n'y a aucun lien entre mon explication (sans doute erronée) et le système.le 19/02/2010 à 22:19 -
Merci pour ta réponse Amnell, tout est clair à présent, bonne continuation.le 19/02/2010 à 22:32
-
AmnellRédacteurBonsoir,
Une nouvelle correction orthographique appliquée aujourd'hui.
Merci à jacques_jean pour sa nouvelle relecture.le 16/05/2010 à 18:26 -
atha2Membre éprouvéTrès bon article mais comme je ne fait pas de Qt en ce moment, je ne sais pas s'il me sera utile dans le futur...
La question qu'il faudrait surtout se poser c'est quand faire de l'introspection ? Perso à part faire de la bidouille et épater la galerie avec, j'ai rarement eu besoin de m'en servir. L'exemple donnée est "jolie" mais pas vraiment utile à part si on a besoin de créer un framework de test unitaire.
Mais j'imagine qu'il doit y avoir d'autre utilisation plus pertinente et notamment dans le cadre de Qt (création d'interface graphique charger à partir d'un fichier XML par exemple ?).
mercile 17/05/2010 à 14:27 -
AmnellRédacteurLa question est en effet très pertinente, mais j'y ajouterais le mot "explicitement", car la programmation avec Qt peut s'avérer introspective dans certains cas de figure.
Dans la documentation, les moteurs de scripts et les constructeurs de GUI sont donnés comme exemples à l'utilisation des méta-objets.le 18/05/2010 à 1:12 -
AmnellRédacteurBonsoir,
Une nouvelle correction a été effectuée aujourd'hui.
Merci à Shulgin pour ses remarques et ses suggestions.le 20/06/2010 à 3:46