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

Discussion :

Rafraichir une QProgressBar

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut Rafraichir une QProgressBar
    Bonjour à tous,

    J'ai fais des recherches à propos de la QProgressBar et je n'ai pas trouvé (ou pas compris), comment actualiser l'affichage en temps réel.

    Dans le .cpp
    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
     
    Fenetre::Fenetre(){
     
    /* Essai avec un QTimer, ne fonctionne pas...
     
    timer_test = new QTimer(this);
    connect(timer_test, SIGNAL(timeout()), this, SLOT(progression()));
    timer_test->start(100);
     
    */
     
    QProgressBar *progress = new QProgressBar(this);
    progress->setRange(0,nombre_max->value());
    connect(progress, SIGNAL(valueChanged(int)), this, SLOT(progression()));
    }
     
    void Fenetre::envoi(){
    nb_en_cours = 0;
    for(int i=0;i<nombre_max->value;i++){
    ....
    nb_en_cours++;
    }
    }
     
    void Fenetre::progression(){
    progress->setValue(nb_en_cours);
    qDebug() << nb_en_cours;
    }
    Dans ma fonction progression, je vois bien dans mon terminal les chiffres évolués, mais rien au niveau de la progressbar...

    Quelqu'un peut-il m'aider?

  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
    C'est a toi de faire progresser le contrôle et non l'inverse. Ton idee ave un timer est pas mauvaise pour tester facilement le principe.
    Il faut que après que tu es defini le nin et le max de ta progressbar tu utilise la callback qui s'execute quand ton timer se declanche. Dans ta callback tu incremente la valeur de ta progressbar et cela devrait marcher.
    Bon courage.
    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
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Juste pour info j'avais pas vu.

    Pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QProgressBar *progress = new QProgressBar(this);
    Correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    progress = new QProgressBar(this);
    et tu déclares ça dans le .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QProgressBar *progress;
    C'est étonnant que ton prog ne plantait pas...
    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.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    AH oui merci pour l'erreur, c'est vrai que c'est très bizarre que le programme ne plantait pas...

    Sinon, qu'entend tu par callback?
    Quand je fais :

    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
     
    Fenetre::Fenetre(){
     
    timer_test = new QTimer(this);
    connect(timer_test, SIGNAL(timeout()), this, SLOT(progression()));
    timer_test->start(100);
     
    QProgressBar *progress = new QProgressBar(this);
    progress->setRange(0,nombre_max->value());
    progress->setValue(nb_en_cours);
    qDebug() << nb_en_cours;
     
    connect(progress, SIGNAL(valueChanged(int)), this, SLOT(progression()));
    }
     
    void Fenetre::envoi(){
    nb_en_cours = 0;
    for(int i=0;i<nombre_max->value;i++){
    ....
    nb_en_cours++;
    }
    }
     
    void Fenetre::progression(){
    progress->setValue(nb_en_cours);
    }
    nb_en_cours reste à zéro...
    Pourtant il est bien défini dans mon .h en public.

  5. #5
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    En gros c'est ton slot "progression".
    [EDIT] Dans le code du message du dessus il y a toujours la même erreur que je t'ai dit avant... Tu devrais essayé avec un QTimer comme dans ton code en commentaire. Sinon tu utilises pas de bon signal Slot. regarde dans la FAQ il y a des exemple qui utilise correctement des QProgressBar.
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Il y a quelque chose que je ne comprend pas avec les connect.
    J'ai bien regardé dans les docs et normalement, pour un QProgressBar, le connect doit etre de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connect(progress, SIGNAL(valueChanged(int)), this, SLOT(progression(int)));
    Or, dans ce cas la, j'obtiens l'erreur au niveau du timer car, au niveau du timer j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connect(timer_test, SIGNAL(timeout()), this, SLOT(progression()));
    Et évidemment, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connect(timer_test, SIGNAL(timeout()), this, SLOT(progression(int)));
    ça ne marche pas non plus.

    Ca fait un moment que je me pose cette question: comment fait-on si le SIGNAL et le SLOT n'ont pas les meme arguments?

    je pense que mon problème vient de là...

Discussions similaires

  1. [C#]Rafraichir une image
    Par Scorff dans le forum ASP.NET
    Réponses: 7
    Dernier message: 21/06/2013, 19h53
  2. [JTable] Rafraichir une JTable
    Par Invité dans le forum Composants
    Réponses: 4
    Dernier message: 08/12/2004, 14h40
  3. [jsp]rafraichir une page
    Par GreenJay dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 21/07/2004, 15h41
  4. [Conception][Langue] Rafraichir une application
    Par smash31 dans le forum Général Java
    Réponses: 5
    Dernier message: 06/07/2004, 15h04
  5. [API] Rafraichir une fenetre ?
    Par laurent_h dans le forum Windows
    Réponses: 2
    Dernier message: 18/04/2004, 00h26

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