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 :

Appel dynamique des classes [Reflection]


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 57
    Par défaut Appel dynamique des classes [Reflection]
    Bonjour,

    Je cherche à implementer la reflection dans Qt.
    J'y arrive un peu mais le resultat n'est pas celui escompté, alors je me tourne vers vous si quelqu'un pourrait avoir des idées.
    Recap :
    Je dispose d'une classe heritant de qdialog appelée "Devise".
    Je la recherche dans l'ensemble des widgets de l'application et si je je la trouve par objectName() alors je luis construis un constructeur.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    foreach(QWidget *obj,QApplication::allWidgets ()) 
        {
        	if (obj->objectName()=="Devise")
        	{
        		QMessageBox::information(this,"","Classe trouvée");
        		const QMetaObject *meta = obj->metaObject();
        		QMetaMethod construct = meta->constructor(0);
        		//
        		QGenericArgument parentArg = Q_ARG(QObject*, mdiArea);
     
        		QObject *w = meta->newInstance(parentArg);
        		construct.invoke(obj,parentArg);
        		QObject *w = obj->metaObject()->newInstance(Q_ARG(QObject,this));
        		//const QMetaObject *b = obj->metaObject();
        		//QWidget *w = QMetaObject::staticMetaObject::newInstance( Q_ARG(QObject, MainWindow));
        		//qstatic_cast<QWidget *> (obj) = QMetaObject::newInstance;
        		//obj = dynamic_cast<QWidget *> (w);
        		//mdiArea->addSubWindow(dynamic_cast<QWidget *> (w),Qt::Window);
        		mdiArea->addSubWindow(obj,Qt::Window);
        		obj->show();
       		}
       	}
    voilà, certainement j'ai dû m'embrouiller quelque part après plusieurs tests, si quelqu'un a une idée de comment résoudre ce problème que je maîtrise très bien sous C#, ce serait vraiment génial.

    Merci de votre compréhension.

  2. #2
    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
    Salut.
    Tu cherche à faire quoi???

    Regarde peut être ceci :
    http://qt.developpez.com/doc/4.6-sna...ect/#findchild

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 57
    Par défaut
    En fait je cherche à lancer mes widgets par leur nom en passant un string en paramètre(Nom de la classe).
    Le but est d'avoir un menu complètement dynamique, mais aussi de gagner du temps en programmation en ne m'embarrassant pas des noms des classes.

    Le qFindChildren() me ramenera bien le nom de l'objet mais comment l'instancier ?
    Tous mes objets(widgets) ont les mêmes types de constructeur c'est à dire parent=0 par défaut, puis qu'ils héritent tous d'une autre classe propriétaire.

    Pour le moment j'arrive bien à les instancier avec ce code fourni mais si vous revenez pour la deuxième ou trois fois, le code ne marche plus.

  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
    Par défaut
    tu veut faire une factory qui va te creer tes widgets en fonction du nom, c'est cela?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 57
    Par défaut
    Oui, effectivement

  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
    Regarde cela peut être
    http://qt.developpez.com/doc/4.6-sna.../#createwidget

    Sinon, essaie d'utiliser les metadata static de la classe :
    http://qt.developpez.com/doc/4.6-sna...metaobject-var

    le newInstance à l'aire d'être la bonne méthode :
    http://qt.developpez.com/doc/4.6-sna...t/#newinstance

    voici quelques première pistes.

    Aprés, tu peut aussi implémenter ta factory. Je sais pas trop.

Discussions similaires

  1. [JAXB] Generation dynamique des classes
    Par Invité dans le forum Persistance des données
    Réponses: 6
    Dernier message: 09/09/2008, 12h20
  2. Appel dynamique de classe
    Par lannel dans le forum Général Python
    Réponses: 2
    Dernier message: 07/04/2008, 09h41
  3. conception d'un appel dynamique aux classes
    Par Choupinou dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 09h09
  4. [POO] Appels Dynamiques à des classes
    Par Korko Fain dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 09h26
  5. Modifier dynamiquement des class
    Par titou250 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 14h15

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