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 :

Récupération de QApplication après le exec()


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut Récupération de QApplication après le exec()
    Bonjour,

    Je souhaiterais faire la chose suivante :
    - lancer une Qapplcication via une classe.
    - y ajouter des widgets sachant que chaque widget est une classe à part et doit recuperer la QApplciation

    J'ai essayé avec QApplication::instance() dans chaque widget, mais le problème est que lorsqu'on lance la QApplication dans la classe "prinipale" on ne revient plus du exec().

    J'aimerais éviter les threads, est-ce possible ?

  2. #2
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Je comprends pas vraiment ton problème.

    Pour "démarrer" ton application, tu fais un QApplication::exec();.

    Ensuite, si tu as besoin de manipuler ton instance de QApplication, tu peux, partout dans ton code (à condition que tu aies un #include <QApplication>), utiliser la macro qApp qui retourne un pointeur vers cette instance.

    En terme de conception, il est plus propre d'écrire l'exec dans le main, et non dans une classe précise, de manière à bien segmenter ton code et rendre à chacun ses responsabilités (ce n'est pas à une classe de décider de l'exécution de ton application).

  3. #3
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Pourrais-tu être plus précis s'il te plait, sur le passage avec la macro qApp.
    Commnet cela s'utilise ?

    Donc dans le main() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // class contenant le main()
    QApplication::Qapplication app = new ....;
    ....
     
    QApplication::exec(); // si j'ai bien compris
    Puis dans les autres classe, comment j'utilise qApp ?

  4. #4
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Exemple de main qui affiche le widget MonWidget :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <QApplication>
    #include "MonWidget.h"
     
    void main(int argc, char * argv[])
    {
    QApplication app(argc,argv);
     
    MonWidget w;
    w.show();
     
    return app.exec();
    }
    MonWidget.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <QApplication>
    #include <QWidget>
     
    class MonWidget : public QWidget
    {
        Q_OBJECT
     
        public :
     
        MonWidget (QWidget * parent = 0);
     
        //Stuff
    };
    MonWidget.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "MonWidget.h"
     
    MonWidget::MonWidget (QWidget * parent) : QWidget(parent)
    {
        //Ton constructeur
     
        //Exemple d'appel à l'instance courante de QApplication :
        qApp->setStyleSheet("/chemin");
    }

    NB : le main est dans un fichier main.cpp, surtout pas dans un fichier relatif à une classe particulière !

  5. #5
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    OK donc qApp c'est à la place QApplication::instance(), mais dans ton exemple, comment faire pour que le widget s'ajoute à l'application à la manière d'un plugin.

    Moi je voudrais plutôt quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main()
    {
     QApplication app( argc,  argv);
     ...
    // ici l'application n'est pas encore lancer, donc rien à recuperer pour myWidget
     IHM.addWidget();
     
    app.exec(); // si je le mets avant mywidget ..., on n'en reviendra jamais
    }
    Dans IHM.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void addWidget()
    {
     // Recuperer l'application courante alors que pas d'exec() dans le main()
      QApplication app = qApp-> ???.
      MyWidget *w = new MyWidget();
      w->resize();//par exemple
     w->show();
     
    }
    Ca ne marche pas.

  6. #6
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    A la manière d'un plugin?

    J'ai très beaucoup de mal à comprendre ton problème.

    IHM.addWidget();
    Qu'est ce que IHM ???

    // Recuperer l'application courante alors que pas d'exec() dans le main()
    QApplication app = qApp-> ???.
    A quoi ça sert ça ?

    app.exec sert à lancer la machine dans un état initial défini par tout ce qui précède cette ligne (ici, la création de MonWidget). Plus en détail, il s'agit de la création de l'eventLoop de Qt qui permet le bon fonctionnement des objets de Qt (comprenant l'affichage de fenêtres).

    Une fois lancé, tu n'as pas besoin de "suite". Ce sont tes objets qui se chargeront de répondre aux actions de l'utilisateur sur ton application (avec le système de signaux et slots, par exemple, tu indiquera que faire après l'appui sur un bouton, ect...).


    Bref, tu devrai commencer par lire des cours et tutos sur Qt afin d'y aller étape par étape.

Discussions similaires

  1. Récupération de contacts après migration
    Par dj_benz dans le forum Outlook
    Réponses: 3
    Dernier message: 27/06/2007, 16h57
  2. Récupération des données après restauration du système avec Ghost
    Par digital prophecy dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 12/06/2007, 14h05
  3. Réponses: 1
    Dernier message: 04/06/2007, 11h34
  4. Réponses: 3
    Dernier message: 19/04/2007, 21h55
  5. [MySQL] syntaxe variable lors d'une récupération de valeurs après mysql
    Par mussara dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/11/2006, 13h30

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