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 :

Fenêtre avec progress bar


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut Fenêtre avec progress bar
    Bonjour,

    J'ai crée une IHM dont l'une des fonctions est que quand on clique sur un bouton ok, il lance un autre programme qui fait un calcul. Comme il n'y a aucune indication à l'utilisateur de ce programme de ce qui est en train de se passer, j'ai pensé à créer une qwidget qui contient une progresse bar.

    Cette deuxième fenêtre contient donc la bar, et deux boutons: annuler et fermer. Annuler pour interrompre l'opération en cours. Fermer, un bouton sur lequel on ne peut cliquer que lorsque la bar est à 100%.

    Dans le même projet, j'ai déjà crée cette fenêtre avec designer, mais je ne sais pas comment l'appeler dans mon programme :s

    Comment connecter l'exécution d'un programme à une progress bar??

    Merci.

  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
    A moins d'utiliser des méthodes de communication inter process (IPC) comme DBus par exemple (sous Linux), je vois mal comment communiquer un avancement à ta progress bar qui vit dans une autre application.

    Ce que tu peux faire (et qui me parait plus simple à mettre en place) c'est d'utiliser une progress bar infinie (voir dans la doc pour le comment ), et de ne notifier que la fin d'exécution de ton autre process (récupérable aisément avec le signal finished() de QProcess) et alors, rendre le bouton Ok clickable.

    Pour ta fonction "Annuler", même remarque, sans IPC, tu ne pourra pas depuis ton application ordonner à l'autre d'annuler le process en cours. Tu sera obliger de passer par des dérivés : Killer brutalement le process (bouh, c'est mal), feinter via un fichier texte qui contient 1 par défaut et dans lequel on écrit 0 si il faut arrêter le process (et l'autre process doit régulièrement surveiller ce fichier pour annuler le traitement si besoin, of course), ect...

    Pour "appeler" ta fenêtre avec la progress bar il faut créer un SLOT perso relié au signal clicked du bouton ok. Ce slot créé le QProcess, le démarre (de manière non bloquante => voir la doc), et affiche la fenêtre avec la progress bar infinie.

    Réponse donnée à l'arrache (je dois quitter le taf). J'affinerai si t'as besoin de plus de détails.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    Merci pour ta réponse. Je crois que je vais changer d'idée et faire plus simple. Une fenêtre d'information qui apparait quand le calcul est fini, et le pointeur de la souris qui change.
    Pour faire ça, j'ai un petit soucis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        QProcess *launch;
        launch= new QProcess(this);
        QString qtransit=QString::fromStdString("qtransit.bat");
        launch->start(qtransit);
    Ce que je fais, comme on peut le voir, c'est exécuter un script batch et dans ce script, il y a la commande de l'exécution du vrai programme.
    Le problème que j'ai maintenant c'est savoir s'il y a un moyen de récupérer le statut de ce programme exécuté dans le script.

    Merci.

  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
    Si le script est bloquant (c'est à dire qu'il ne se termine que quand l'appli lancée est terminée), il te suffit d'utiliser le signal finished() de QProcess.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Si ton script/programme t'envoie des infos sur sa progression tu peux utiliser le signal readyreadyReadStandardOutput() pour lire ces infos (avec la méthode readLine()) et mettre a jour ta barre de progression.

    Tu peux aussi utiliser la fonction statique execute() de QProcess pour faire un appel bloquant de ton appli, ainsi l'utilisateur n'aura plus la main sur l'IHM durant le calcul mais c'est plutôt moche

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2009
    Messages : 128
    Par défaut
    Merci pour vos réponses. Mais j'ai préféré contourner le problème. Je ne fais pas juste un launch->start(toto) mais plutôt un startDetached. Comme ça, la console est ouverte, et c'est mon indication sur l'état du processus en exécution.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/02/2010, 15h45
  2. utilisation d'une progress bar avec un timer
    Par devock dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/12/2006, 12h57
  3. progress bar avec JSP
    Par srodrigues dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 11/07/2006, 15h48
  4. Progress Bar avec texte superposé
    Par Tenguryu dans le forum C++Builder
    Réponses: 5
    Dernier message: 14/05/2006, 13h31

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