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 :

QProgressDialog patientez SVP


Sujet :

Qt

  1. #1
    Membre habitué Avatar de Watier_53
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 469
    Points : 140
    Points
    140
    Par défaut QProgressDialog patientez SVP
    J'ai un petit soucis ! j'ai dans mon application une méthode qui me créé une vidéo. Pendant ce temps je veux faire attendre l'utilisateur en lui indiquant d'attendre. MAis je n'ai pas la possibilité de savoir le temps que ma méthode va mettre ! comment puis je faire pour le faire patienter

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Watier_53 Voir le message
    J'ai un petit soucis ! j'ai dans mon application une méthode qui me créé une vidéo. Pendant ce temps je veux faire attendre l'utilisateur en lui indiquant d'attendre. MAis je n'ai pas la possibilité de savoir le temps que ma méthode va mettre ! comment puis je faire pour le faire patienter
    Tu pourrai te basé sur le nombre d'image (ou séquence) de ta vidéo. Tu met à jour t'as qprogressdialog aprés chaque image(ou séquence).
    http://qt.developpez.com/doc/4.3/qprogressdialog/
    Ca depend ce sur quoi tu peut te baser pour estimer l'avancement.

  3. #3
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    +1, dans le pire des cas, tu mets minimum et maximum à 0, et tu as une barre "infiine", un rectangle qui va de d'un côté à l'autre en "ping pong" (comme une QProgressBar, et pour cause )

  4. #4
    Membre habitué Avatar de Watier_53
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 469
    Points : 140
    Points
    140
    Par défaut
    ok merci je vais essayer avec le 0 car je ne sais pas combien de temps dure ma méthode !

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    +1, dans le pire des cas, tu mets minimum et maximum à 0, et tu as une barre "infiine", un rectangle qui va de d'un côté à l'autre en "ping pong" (comme une QProgressBar, et pour cause )
    ??
    j'ai testé, chez moi ca ne fait pas un va et viens. Juste une barre qui avance et repart depuis le début.

    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
    #include <QtGui>
     
     
    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
     
        QPushButton quit("Quit");
        QProgressDialog  mybar( "essai", 0, 0, 0);
        quit.resize(75, 30);
        quit.setFont(QFont("Times", 18, QFont::Bold));
     
        QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
     
        quit.show();
        mybar.show();
        return app.exec();
    }
    Mais question bête. D'où tu sort ce fonctionnement?? J'ai pas vu dans la doc...

  6. #6
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Mea culpa, c'était le comportement Qt3 alors (je sais pas, j'ai ce souvenir là...)
    Mais le principe reste (heureusement ) le même; tiré de la doc de QProgressBar:
    If minimum and maximum both are set to 0, the bar shows a busy indicator instead of a percentage of steps.
    (après, c'est juste une extrapolation sur le fait que QProgressDialog utilise QProgressBar)

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Mea culpa, c'était le comportement Qt3 alors (je sais pas, j'ai ce souvenir là...)
    Mais le principe reste (heureusement ) le même; tiré de la doc de QProgressBar:

    (après, c'est juste une extrapolation sur le fait que QProgressDialog utilise QProgressBar)
    pourtant j'avais regardé ....
    Merci, ça fera une super Q/R pour la Faq

  8. #8
    Membre habitué Avatar de Watier_53
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 469
    Points : 140
    Points
    140
    Par défaut
    je ne vois meme pas ma barre de progression je comprend pas !
    voila ce que je fais dans une méthode de ma classe mainwindow:

    QProgressDialog mybar( "essai", 0, 0, 0);
    mybar.show();

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Peut tu mettre le code de ta fonction?

  10. #10
    Membre habitué Avatar de Watier_53
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 469
    Points : 140
    Points
    140
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MainWindow::createMovie(QString s){
    QProgressDialog mybar( "essai", 0, 0, 0);
    mybar.show();
    FM->createMovie(s);
    }
    ceci se trouve dans ma classe mainwindow

  11. #11
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Et le code pour faire avancer le "curseur" ?

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Watier_53 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MainWindow::createMovie(QString s){
    QProgressDialog mybar( "essai", 0, 0, 0);
    mybar.show();
    FM->createMovie(s);
    }
    ceci se trouve dans ma classe mainwindow
    Que fait FM->createMovie(s)??
    a mon avis, elle n'as pas le temps de s'afficher car tu block la thread principale(donc l'eventloop) par l'appel de la fonction, et une fois que tu est sortie, ben ta QProgressDialog est détruite.
    Essaie peut être en appelant plusieurs fois pendant l'exécution de ta fonction ceci :
    qApp->processEvents();

    Tu devrait donner la création de ta video à une thread

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Hé comme quoi je commence a comprendre
    http://qt.developpez.com/doc/4.3/dialogs-findfiles/

    We run through the files, one at a time, and for each file we update the QProgressDialog value. This property holds the current amount of progress made. We also update the progress dialog's label.

    Then we call the QCoreApplication::processEvents() function using the QApplication object. In this way we interleave the display of the progress made with the process of searching through the files so the application doesn't appear to be frozen.

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Pour être plus précis, comme tu bloque la thread principale, il faut utiliser
    qApp->processEvents(); pour executer des actions mis dans l'event loop. Et ainsi donner du temp pour les traitements d'événement comme l'affichage.
    Voici un exemple qui simule une action longue et l'appel ou non de qApp->processEvents();

    Tu peut jouer sur le paramètre de la fonction "action_simulation" pour augmenter ou diminuer le temps d'execution


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #include <QtGui>
    #include <cmath>
     
    //Simule une action
    double action_simulation(int nb =1000)
    {
        double somme(0.);
        for (unsigned int j=0;j<nb;++j) somme+=sqrt(j);
        return somme;
    }
     
     
    class MyQPushButton : public QPushButton
    {
        public :
        //createur.
        //text : text du boutton
        //exe  : commande à executer lors de l'appui.
        MyQPushButton(const QString & text, QWidget * parent = 0):QPushButton (text,parent){resize(75, 30);setFont(QFont("Times", 18, QFont::Bold));};
        virtual void mouseReleaseEvent ( QMouseEvent * event )
            {
            QProgressDialog mybar( "Wait ...", 0, 0, 0);
            mybar.setWindowModality(Qt::ApplicationModal);
            mybar.show();
            for (int i=0;i<20000;++i)
                {
                   action_simulation() ;
                }
            }
    };
     
     
    class MyQPushButton2 : public QPushButton
    {
        public :
        //createur.
        //text : text du boutton
        //exe  : commande à executer lors de l'appui.
        MyQPushButton2(const QString & text, QWidget * parent = 0):QPushButton (text,parent){resize(75, 30);setFont(QFont("Times", 18, QFont::Bold));};
        virtual void mouseReleaseEvent ( QMouseEvent * event )
            {
             QProgressDialog mybar( "Wait ...", 0, 0, 0);
            mybar.setWindowModality(Qt::ApplicationModal);
            mybar.show();
            for (int i=0;i<20000;++i)
                {
                    qApp->processEvents();
                    action_simulation() ;
     
                }
            }
    };
     
    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
        QWidget w;
        QVBoxLayout vl(&w);
        //boutton : L'appliquation se bloque pendant le traitement
        MyQPushButton bouton1("Sans qApp->processEvents()");
     
        //boutton : L'appliquation ne se bloque pas pendant le traitement
        MyQPushButton2 bouton2("Avec qApp->processEvents()");
     
     
     
        vl.addWidget(&bouton1);
        vl.addWidget(&bouton2);
     
        w.show();
        return app.exec();
    }

  15. #15
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Ca fait pas avancer le schmilblik (je parle du progress bar ) non plus ça.
    Indice: la progression se fait à la demande.

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Ca fait pas avancer le schmilblik (je parle du progress bar ) non plus ça.
    Indice: la progression se fait à la demande.
    ben si, il utilise min et max à 0. Il n'y as donc pas besoin de la faire avancer. Elle avance toute seule.
    En tout cas avec Qt4.3 mingw

  17. #17
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    ben si, il utilise min et max à 0. Il n'y as donc pas besoin de la faire avancer. Elle avance toute seule.
    En tout cas avec Qt4.3 mingw
    J'aurais mieux fait de me taire ce coup-ci...

Discussions similaires

  1. [XL-2007] Msgbox ("patientez svp")
    Par dodo69 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/05/2011, 18h00
  2. Important à lire par tous SVP
    Par Community Management dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2010, 22h54
  3. message "SVP Patientez.."
    Par faamugol dans le forum ASP
    Réponses: 6
    Dernier message: 23/03/2007, 12h48
  4. Votre avis sur 1 livre SVP
    Par cab dans le forum DirectX
    Réponses: 4
    Dernier message: 17/09/2003, 10h39
  5. Réponses: 3
    Dernier message: 28/02/2003, 17h06

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