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 :

Fermeture de QDialog impossible après exec() [Graphics View]


Sujet :

Qt

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut Fermeture de QDialog impossible après exec()
    Bonjour,

    J'ai un petit souci de fermeture de qdialog lancée par exec().


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Qdialog test;
    test.exec();
     
    //autre code
     
     
    test.done(1); // ou Accepted ou rejected
    //elle ne se ferme pas
    Je comprends pas comment appeler un slot de fermeture à ce niveau là.
    Sachant que je ne peux pas utiliser show()

    Si vous avez une idée..
    merci par avance

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Salut defrouille et bienvenue sur le forum,

    Je ne suis pas sur d'avoir compris ton problème mais quand tu lances le exec() sa montre ta dialog de maniere modale (voir ici) donc c'est normale que tu n'arriveras pas a la fermé par le done() car a mon avis tu ne passes pas dedans tant que la fonction exec() n'est pas terminé. En gros le code apres le exec() n'est pas exécuté. Regarde avec un debugger si tu passes bien par la fonction done().

    Si c'est bien ton problème il faudrait que tu revoies la conception et que tu explique mieux ce que tu veux faire pour qu'on puisse plus t'aider.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    Bonsoir et merci de m'avoir répondu.

    En effet je viens de me rendre compte que rien ne se passe après exec() tant que la fenêtre n'est pas fermée. Il faut que je fasse autrement.
    En fait je lance un createprocess() et veut afficher une qprogressdialog() pendant ce temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (CreateProcess(NULL,path,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
           {
                    QProgressDialog pd;
                    pd.exec(); //le seul moyen serait donc show()
     
                     WaitForSingleObject(pi.hProcess, INFINITE);
                          CloseHandle(pi.hProcess);
                          CloseHandle(pi.hThread);
           }
    J'ai deux problèmes avec show():
    -je n'arrive pas à avoir la main sur ma fenêtre que ce soit en modal ou pas,
    mon application externe me bloque, ce n'est pas le cas avec exec().
    -Aussi je voudrais avoir ma qprogressdialog "folle" car je ne sais pas quand mon appli sera terminée, c'est pour cela que je fais un waitforsingleobject, avec show je ne sais pas comment faire, avec exec et les valeurs min et max à 0 il n'y a aucun problème.

    voyez-vous comment résoudre ces deux problèmes?
    encore merci

    edit : en rajoutant pd.setWindowFlags( Qt::WindowStaysOnTopHint); j'ai ma fenêtre au premier plan mais inaccessible

  4. #4
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Utilise plutot QProcess que CreateProcess. Si tu utilise Qt autant aller jusqu'au bout et utiliser Win32 que si tu n'as pas d'autre choix. Tu as des exemple dans la FAQ ici. Regarde si tu as des chose qui corresponde a ce que tu souhaites. Sinon donne un peut plus de code car je n'arrive pas a comprendre exactement ce que tu souhaites faire.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    Bonjour et merci encore,

    En effet qprocess est bien plus simple d'utilisation, cependant j'ai un nouveau problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     QProcess qp;
        if (qp.startDetached ("c:\\prog.exe"))
    {
     QProgressDialog pd;
     pd.show();
     
     qp.waitForFinished(-1);
    }
    Et là ma qprogressdialog s'ouvre et se ferme aussitot alors que le processus de prog.exe est toujours actif.

    je vois pas quelle autre fonction utiliser que waitforfinished
    une idée?
    merci

  6. #6
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Et si tu utilise start() au lieu de starDetached() ca fonctionne ???

    Normalement ton IHM devrait freezer jusqu'a la fin de ton programme mais fait quand meme l'essaie.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    En effet, si j'utilise start() ma qdialogprogress reste ouverte mais inaccessible
    Y a-t-il une option pour que le qprocess ne soit pas modal?
    merci

  8. #8
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Je sais pas mais est ce qu'un truc comme ca fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QProcess qp;
    QProgressDialog pd;
    connect(&qp,SIGNAL(finished(int , QProcess::ExitStatus)),&pd,SLOT(done(int)));
    qp.start("c:\\prog.exe"))
    pd.exec()
    Ce code n'est absolument pas validé mais je pense que c'est par là qu'il faut chercher.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 19
    Par défaut
    tu es un dieu!!!!

    ca marche impeccable. J'ai rajouté le setminimum et setmaximum a 0 et ca marche comme je veux.
    En plus, comme je veux ajouter un bouton cancel, je pourrai utiliser un connect dans l'autre sens et ca devrait etre nikel.
    J'ai encore un truc a voir maintenant, pour que quand j'appuie sur minimize, que ca réduise la fenetre principale aussi ; mais je vais chercher, si je galère je reviendrais
    En tout cas merci de m'avoir dépatouillé de cette situation.
    Est-ce que j'attends avant de mettre la balise résolue ou est-ce que j'ouvrirai un autre post?

    merci encore!

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 26/04/2007, 15h02
  2. Fermeture de formulaire impossible
    Par julio02200 dans le forum IHM
    Réponses: 11
    Dernier message: 21/07/2006, 15h22
  3. fermeture d'une application après un temp d'inactivité?
    Par sitdown dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 24/08/2005, 15h44
  4. make impossible après ./configure lors de l'installation
    Par christophe5757 dans le forum Débuter
    Réponses: 5
    Dernier message: 04/08/2005, 19h34
  5. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24

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