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 :

Application qui ne se quitte pas


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut Application qui ne se quitte pas
    Bonjour,
    J'ai une appli avec une QMainWindow, j'ai fait un slot exit qui la ferme et donc quitte aussi l'application en appelant le slot "close". Tout va bien lorsque j'appelle ce slot normalement depuis un bouton de ma fenêtre.

    J'ai aussi une boîte de dialogue affichée au démarrage qui permet de faire certains choix avant d'utiliser l'appli, pour ça j'ai ajouté une fonction showIntro qui ouvre cette boîte de dialogue, récupère des infos puis configure ma fenêtre en conséquence.
    Voilà mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        w.showIntro();
     
        return a.exec();
    }
    Ce qui va ouvrir mon appli et ma fenêtre principale, puis afficher par dessus ma boîte de dialogue (modale). Dans cette boîte de dialogue j'ai laissé la possibilité de quitter l'application, en fait ma fonction showIntro récupère un code correspondant au bouton cliqué sur la boîte de dialogue. Si le code correspond à "quitter" j'appelle alors mon slot exit (dans showIntro donc). Or cela ferme bien ma fenêtre principale mais ne termine pas mon application.

    Voilà le code partiel de showIntro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DIntro dialog(_applicationMode, this); // _applicationMode est passé par référence et sera affecté dans la boîte de dialogue
    dialog.exec();
    if(_applicationMode == ApplicationMode::Quit)
    {
        exit();
        return;
    }
    ....
    J'ai essayé de rajouter "setAttribute(Qt::WA_DeleteOnClose);" dans le constructeur de ma MainWindow, j'ai une erreur "free(): invalid pointer:" lorsque je quitte. Je rappelle que tout quitte normalement lorsque j'appelle mon slot exit() à un autre moment, ça ne pose problème que lorsque je l'appelle de ma fonction showIntro. Alors je suppose que le fait qu'elle soit appelée avant QApplication::exec() peut poser problème, mais je ne vois pas comment faire autrement.

    Merci d'avance pour toute suggestion :)

  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
    Que fait ta fonction exit?
    Pourquoi ne pas tester le retour de showIntro pour savoir s'il faut lancer exec?

    Tu peut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTimer::singleShot(0,qApp,SLOT(quit()));
    pour poster un event dans l'eventloop qui va fermer l'appli.

  3. #3
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Ma fonction exit sauvegarde quelques trucs et appelle close().

    Ma fonction showIntro renvoie maintenant un booléen disant si l'application doit continuer ou non, et je ne lance le app.exec() que si c'est oui.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        if(w.showIntro())
            return a.exec();
     
        return 0;
    }
    Ca fonctionne, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2003] Application qui ne se lance pas (problème de droits)
    Par beegees dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 23/02/2010, 17h34
  2. Application qui ne se termine pas
    Par Tsukaasa dans le forum Delphi
    Réponses: 3
    Dernier message: 23/03/2007, 23h46
  3. Probème d'application qui ne se lance pas sous XP
    Par ivanleterrible dans le forum Windows XP
    Réponses: 4
    Dernier message: 26/05/2006, 18h22
  4. [wxPython] Application qui ne s'arrete pas....
    Par Mr Hyde dans le forum wxPython
    Réponses: 9
    Dernier message: 10/11/2005, 16h28
  5. [AWT]Application qui ne se réactualise pas.
    Par Bugmaster dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 06/08/2004, 14h32

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