IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

De QObject aux méta-objets
Une plongée au coeur des fondations de Qt, le tutoriel de Louis du Verdier mis à jour

Le , par Amnell

0PARTAGES

1  0 
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 !

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de
https://www.developpez.com
Le 19/02/2010 à 20:16
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.
0  0 
Avatar de Amnell
Rédacteur https://www.developpez.com
Le 19/02/2010 à 21:51
Salut,

Tout d'abord, merci du commentaire.
Je vais à la suite répondre à tes deux questions :

Citation Envoyé par Abdelite Voir le message
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 ?
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.

Citation Envoyé par Abdelite Voir le message
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 ?
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 ?
0  0 
Avatar de
https://www.developpez.com
Le 19/02/2010 à 21:57
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 .cpp
0  0 
Avatar de Amnell
Rédacteur https://www.developpez.com
Le 19/02/2010 à 22:19
Une déclaration de classe template avec dedans une méthode template (fichier header) :

Code : Sélectionner tout
1
2
3
4
5
6
7
template <typename T>
class MyClass
{
	public:
	//...
	T method() const; 
};
Et l'implémentation dans un fichier .cpp :

Code : Sélectionner tout
1
2
3
4
5
template<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 ?
Comme le code donné ci-dessus fonctionne sans problème, il n'y a strictement aucun soucis, pour répondre à ta question.

EDIT : Mais je pense qu'il n'y a aucun lien entre mon explication (sans doute erronée) et le système.
0  0 
Avatar de
https://www.developpez.com
Le 19/02/2010 à 22:32
Merci pour ta réponse Amnell, tout est clair à présent, bonne continuation.
0  0 
Avatar de Amnell
Rédacteur https://www.developpez.com
Le 16/05/2010 à 18:26
Bonsoir,

Une nouvelle correction orthographique appliquée aujourd'hui.
Merci à jacques_jean pour sa nouvelle relecture.
0  0 
Avatar de atha2
Membre éprouvé https://www.developpez.com
Le 17/05/2010 à 14:27
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...
Citation Envoyé par Amnell Voir le message

Comment utiliser l'introspection ? Cette question est celle à laquelle il me faudra répondre dans cette partie.
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 ?).

merci
0  0 
Avatar de Amnell
Rédacteur https://www.developpez.com
Le 18/05/2010 à 1:12
Citation Envoyé par atha2 Voir le message
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.
La 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.
0  0 
Avatar de Amnell
Rédacteur https://www.developpez.com
Le 20/06/2010 à 3:46
Bonsoir,

Une nouvelle correction a été effectuée aujourd'hui.
Merci à Shulgin pour ses remarques et ses suggestions.
0  0