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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

De QObject aux méta-objets, une plongée au cœur des fondations de Qt [Tutoriel]


Sujet :

Qt

  1. #1
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut De QObject aux méta-objets, une plongée au cœur des fondations de Qt
    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 !
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  2. #2
    Invité
    Invité(e)
    Par défaut
    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.

  3. #3
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    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 ?
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  4. #4
    Invité
    Invité(e)
    Par défaut
    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

  5. #5
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Une déclaration de classe template avec dedans une méthode template (fichier header) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    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.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci pour ta réponse Amnell, tout est clair à présent, bonne continuation.

  7. #7
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonsoir,

    Une nouvelle correction orthographique appliquée aujourd'hui.
    Merci à jacques_jean pour sa nouvelle relecture.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  8. #8
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    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

  9. #9
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    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.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  10. #10
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonsoir,

    Une nouvelle correction a été effectuée aujourd'hui.
    Merci à Shulgin pour ses remarques et ses suggestions.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/11/2010, 10h13
  2. Méta-données attachées aux fichiers sur une partition ext2 ?
    Par Hibou57 dans le forum Administration système
    Réponses: 2
    Dernier message: 21/11/2007, 14h53
  3. [FLASH MX 2004] Acceder aux variables d'une Popup
    Par freegreg dans le forum Flash
    Réponses: 3
    Dernier message: 05/05/2004, 21h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo