Partage
  • Partager sur Facebook
  • Partager sur Twitter

QT4 barre de progression

cliquer pour changer la valeur de barre

Sujet résolu
    1 juin 2008 à 18:36:03

    Bonjour
    Je souhaite faire une barre de progression dont la valeur se modifie lorsque l'on clique sur un bouton.
    J'ai pensé faire une boucle mais je ne sais pas comment la connecter pour que la valeur change ...
    Voici ce que je ferait comme boucle:
    // Ce code n'est pas un vrai ! C'est juste un exemple ...
    MaFenetre::MaFenetre() : QWidget()
    {
       bar = new QProgressBar(this);
       bar->setGeometry(..., ..., ..., ...); //peu importe la valeur !
    
       bouton = new QPushBouton(this)
       bouton->setGeometry(..., ..., ..., ...); //peu importe la valeur !
    
       QObject::connect(bouton, SIGNAL(clicked()), bar, SLOT(augValeur())); //La connection serais fausse !!
    }
    
    
    
    void MeFenetre::augValeur()
    {
        while (valeur < 100)
        {
           valeur++;
        }
    }
    


    Je ne sais pas comment faire la boucle !! ni comment faire la connection ...
    Si quelqu'un sait cmoment faire, qu'il me fait part de son savoir lol !
    • Partager sur Facebook
    • Partager sur Twitter
      1 juin 2008 à 18:41:51

      Salut

      MaFenetre::MaFenetre() : QWidget()
      {
         bar = new QProgressBar(this);
         bar->setGeometry(..., ..., ..., ...); //peu importe la valeur !
      
         bouton = new QPushBouton(this)
         bouton->setGeometry(..., ..., ..., ...); //peu importe la valeur !
      
         QObject::connect(bouton, SIGNAL(clicked()), this, SLOT(augValeur())); //La connection serais fausse !!
      }
      
      
      
      void MeFenetre::augValeur()
      {
          while (valeur <= 100)
          {
             bar->setValue(valeur);
          }
      }
      


      Le slot appartient a this (ta classe) donc il faut connecter a this ensuite il faut apperler setValue (cf la doc) qui prend un int donc valeur et setValue doit être appeler "à partir" de la QProgressBar

      EDIT : Énorme erreur désolé code corriger
      • Partager sur Facebook
      • Partager sur Twitter
        1 juin 2008 à 18:56:51

        Merci
        Voici mon vrais code avec les modifications :
        MaFenetre.h
        #include <QApplication>
        #include <QWidget>
        #include <QLabel>
        #include <QProgressBar>
        #include <QPushButton>
         
        class MaFenetre : public QWidget
        {
            Q_OBJECT
            
        
              
            public:
            MaFenetre();
            
            
            public slots:
            void clickAnnuler();
            
            private:
            QProgressBar *bar;
            QPushButton *annuler;
        


        MaFenetre.cpp
        #include "MaFenetre.h"
         
        MaFenetre::MaFenetre() : QWidget()
        {
            setFixedSize(350, 130);
            bar = new QProgressBar(this);
            bar->setGeometry(10, 73, 320, 22);
            
            annuler = new QPushButton ("Annuler", this);
            annuler->setGeometry(5, 100, 70, 25);
            QObject::connect(annuler, SIGNAL(clicked()), this, SLOT(clickAnnuler()));
        
        };
        
        void MaFenetre::clickAnnuler()
        {
            while (bar <= 100)
            {
               bar.setValue(20);
            }
        }
        

        Mais cela ne marche pas !
        Voici la console d'erreur
        MaFenetre.cpp: In member function `void MaFenetre::clickAnnuler()':
        MaFenetre.cpp:34: error: ISO C++ forbids comparison between pointer and integer
        MaFenetre.cpp:36: error: `setValue' has not been declared
        MaFenetre.cpp:36: error: request for member of non-aggregate type before '(' tok
        en
        Sais tu pourquoi le code ne marche pas ?
        • Partager sur Facebook
        • Partager sur Twitter
          1 juin 2008 à 19:53:11

          bar est un pointeur et non un objet.


          Ce sera donc logiquement :
          bar->setValue(20);
          


          Lis tes erreurs, celle-ci "MaFenetre.cpp:34: error: ISO C++ forbids comparison between pointer and integer", te le dis explicitement ;)

          • Partager sur Facebook
          • Partager sur Twitter
            1 juin 2008 à 19:56:01

            Citation : El Typhone

            bar est un pointeur et non un objet.




            Effectivement, désolé de la (grosse) erreur.
            • Partager sur Facebook
            • Partager sur Twitter
              1 juin 2008 à 20:10:57

              et puis ce code est faux.
              while (bar <= 100)
                  {
                     bar->setValue(20);
                  }
              

              bar est obligatoirement(?) supérieur à 100 car tu testes son adresse (et dans une boucle en plus).
              void MaFenetre::clickAnnuler()
              {
                  bar->setValue(20);
              }
              

              suffit, voire :
              void MaFenetre::clickAnnuler()
              {
                  bar->setValue(bar->value() + 20);
              }
              

              pour la faire avancer par ex.
              • Partager sur Facebook
              • Partager sur Twitter
                3 juin 2008 à 20:04:12

                Merci pour vos reponses. Le dernier code donné fonctionne !
                Mais j'ai une autre question :
                Si je veux afficher un message (QMessageBox) quand la barre est a 100 %, je doit mettre quoi ?
                j'avais pensé a :
                void MaFenetre::clickAnnuler()
                {
                       bar->setValue(bar->value() +20);
                       if (value = 100) //ou if (value == 100)
                       {
                                 QMessageBox::information(this,"...","...........");
                       }
                }
                

                Mais cela ne marche pas !
                Le code d'erreur dit que "value" n'est pas déclaré...
                Comment je fais pour afficher cette boite de dialogue ?
                • Partager sur Facebook
                • Partager sur Twitter
                  3 juin 2008 à 20:40:41

                  normal, faut faire comme juste au dessus :
                  if (bar->value() == 100)
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 juin 2008 à 17:00:51

                    Et aussi ( encore et encore un probleme !!)
                    pourquoi quand dans mon code je tape :
                    bar->setValue(bar->value() +25);
                    

                    La barre n'augmente que de 24 % ? car a cause de ca ma barre ne peut pas atteinder 100% ! elle ne va que jusqua 99%...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    QT4 barre de progression

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown