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 :

moc et template


Sujet :

Qt

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut moc et template
    Hi,

    A l'époque de Qt 1.x. les templates n'étaient pas assez homogène.
    Aujourd'hui visiblement ça n'est plus le cas, serait-il alors possible de se passer du système de moc pour le remplacer par un système à base de métaprogrammation via les templates ?

    Tout ceci dans le but de rester ultra standard.

    Merci

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 775
    Par défaut
    Salut,

    Le moc ne sert plus actuellement qu'à uniformiser les compilateurs sur certains points : il sert aussi et surtout à gérer le système de signaux et de slots, l'introspection... Si tu utilises ces spécificités de Qt, tu dois utiliser le moc. Sinon, tu n'y es pas obligé : tu peux le laisser tomber et n'utiliser que les classes de Qt qui ne les utilisent pas.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    Salut,

    Le moc ne sert plus actuellement qu'à uniformiser les compilateurs sur certains points : il sert aussi et surtout à gérer le système de signaux et de slots, l'introspection... Si tu utilises ces spécificités de Qt, tu dois utiliser le moc. Sinon, tu n'y es pas obligé : tu peux le laisser tomber et n'utiliser que les classes de Qt qui ne les utilisent pas.
    exact mais sans les signaux, ça me paraît difficile d'avoir une GUI fonctionelle

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    en faite le moc ça revient à quoi ? a utiliser le préprocesseur plutôt que les templates ?

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par guillaume07 Voir le message
    en faite le moc ça revient à quoi ? a utiliser le préprocesseur plutôt que les templates ?
    A générer du code que tu n'aimerais pas faire toit même.
    Si tu regarde la définition de Q_OBJECT, c'est un ensemble de fonction utilisé pour les meta données.
    Le moc, va implémenter ces fonctions.

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    ok je vois.

    Une chose embêtante cela dit est l'impossibilité d'avoir une classe template dès lors qu'elle contient des signaux/slots ou autres macro prédéfinies dans les Header de QT.

    Avec une solution à base de template, on ne pourrait pas avoir un système d'introspection complet (utilisant les Q_Property par exepmple), on ne pourrait pas non plus avoir un système de translation pour gérer les différentes langues, on aurait une syntaxe peut être plus lourde, mais en contre partie on aurait un code plus rapide, et pas de limitation sur l'utilisation de paramètres templates avec des classes encapsulant un système de signaux/slots

  8. #8
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Et tu te frapperais la tête contre le mur pendant des jours pour compiler ton code avec un compilo pour mobile ou autre qui ne suit pas assez la norme. Qt mise sur la portabilité maximale. Et avec leur système de metacall le temps d'exécution est loin d'être désastreux. Je sais que l'on peut métaprogrammer ça (j'avais écrit un tel système, à échelle réduite, pour un projet), mais disons que ça sort des "guidelines" de Qt. Ils ne sont pas trop trop dans l'ère du modern C++.

  9. #9
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    certes du point de vue mobilité, ça suffit à expliquer leur choix, mais peut être serait il top d'avoir une version de QT sous forme de template dans le cas ou le compilo respecte le standard C++.

    Mais visiblement ça n'est pas leur philosophie

  10. #10
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Bah maintenir deux systèmes de meta-objets, avec une certaine compatibilité entre les deux (histoire que la migration pour des projets existants soit possible), c'est quand même énormément de temps, de personnes et d'argent du coup, pour très très peu de d'avantages.

  11. #11
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    on est d'accord

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    Citation Envoyé par Alp Voir le message
    Et tu te frapperais la tête contre le mur pendant des jours pour compiler ton code avec un compilo pour mobile ou autre qui ne suit pas assez la norme. Qt mise sur la portabilité maximale. Et avec leur système de metacall le temps d'exécution est loin d'être désastreux. Je sais que l'on peut métaprogrammer ça (j'avais écrit un tel système, à échelle réduite, pour un projet), mais disons que ça sort des "guidelines" de Qt. Ils ne sont pas trop trop dans l'ère du modern C++.

    d'un autre côté en 2009 les principaux os cible ont un compilo qui supporte bien les templates , donc aujourd'hui cet arguement est plus trop valable

  13. #13
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Oui, biensûr, le seul soucis étant qu'avoir cette hétérogénéité -- et des clients qui utilisent des compilos pourris sans pouvoir en changer -- ça mettrait un bazar pas possible pour eux. Ils ne gagneraient vraiment pas beaucoup à faire ça maintenant.

    Après, je ne serais pas contre mais bon je comprends leur décision.

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    No Limits

    Because we had the moc for signals and slots, we could add other useful things to it that could not be done with templates. Among these are scoped translations via a generated tr() function, and an advanced property system with introspection and extended runtime type information. The property system alone is a great advantage: a powerful and generic user interface design tool like Qt Designer would be a lot harder to write - if not impossible - without a powerful and introspective property system. But it does not end here. We also provide a dynamic qobject_cast<T>() mechanism that does not rely on the system's RTTI and thus does not share its limitations. We use it to safely query interfaces from dynamically loaded components. Another application domain are dynamic meta objects. We can e.g. take ActiveX components and at runtime create a meta object around it. Or we can export Qt components as ActiveX components by exporting its meta object. You cannot do either of these things with templates.

    C++ with the moc essentially gives us the flexibility of Objective-C or of a Java Runtime Environment, while maintaining C++'s unique performance and scalability advantages. It is what makes Qt the flexible and comfortable tool we have today.

  15. #15
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    ça reste des utilisations marginales

    - pour le tr, un xml peut faire l'affaire
    - pour le designer, je crois que beaucoup font leur GUI à la mano
    - pour les meta object, c'est pas tous les jours qu'on a besoin de créer un object au runtime autour d'un active X


    Enfin, je ne dis pas, peut être que leur framework est mieux avec le moc, mais je sais pas ça me laisse un goût amer...

Discussions similaires

  1. [Templates] Quel système utilisez-vous ? Pourquoi ?
    Par narmataru dans le forum Bibliothèques et frameworks
    Réponses: 270
    Dernier message: 26/03/2011, 00h15
  2. Template XHTML
    Par Sylvain James dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 16/06/2003, 21h45
  3. appliquer plusieurs templates
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 04/04/2003, 16h26
  4. template match="node() mais pas text()"
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/03/2003, 10h52
  5. [XSLT] template
    Par demo dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 09/09/2002, 11h31

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