Partage
  • Partager sur Facebook
  • Partager sur Twitter

Progréss Bar QT boucle

Anonyme
    27 novembre 2008 à 21:16:55

    Voila je cherche a faire une sorte de chargement avec ma Qprogressbar
    mais je ny arrive pas voila ce que j'ai fait :

    main.cpp :
    #include <QApplication>
    #include <QTranslator>
    #include <QLocale>
    #include <QLibraryInfo>
    #include "fenetre.h"
    
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QString locale = QLocale::system().name();
        QTranslator translator;
        translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
        app.installTranslator(&translator);
    
        MaFenetre fenetre;
        fenetre.show();
    
        return app.exec();
    }
    


    fenetre.c

    #include "Fenetre.h"
    
    MaFenetre::MaFenetre() : QWidget()
    {
        int compteur = 0;
        while (compteur < 100)
        {
            compteur++;
        }
    
        setFixedSize(200, 100);
    
        m_pb = new QProgressBar(this);
        m_pb->setGeometry(10, 10, 190, 40);
    
    
        while (compteur < 100)
        {
            compteur++;
        }
    
        QObject::connect(int compteur, SIGNAL(valueChanged(int)), m_pb, SLOT(setValue(int)));
    
    }
    



    fenetre.h
    #ifndef DEF_MAFENETRE
    #define DEF_MAFENETRE
    
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QProgressBar>
    #include <QSlider>
    #include <QLCDNumber>
    
    class MaFenetre : public QWidget
    {
        public:
        MaFenetre();
    
        private:
        QProgressBar *m_pb;
        int compteur;
        QLCDNumber *m_lcd;
    };
    
    
    #endif
    
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2008 à 21:50:13

      Salut,

      Il n'y a rien qui lance valueChanged(int) donc c'est normal qu'il se passe rien...

      A la limite tu pourrais créer un signal dans ta classe et puis faire emit dans ta boucle.

      Ca ferait un truc du genre :
      while (compteur < 100)
          {
              emit valeurCompteurChangee(compteur);
              compteur++;
          }
      
          QObject::connect(this, SIGNAL(valeurCompteurChangee(int)), m_pb, SLOT(setValue(int)));
      }


      Voilà :)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 novembre 2008 à 22:34:47

        Heu... j'ai pas compris :)
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2008 à 23:50:06

          QObject::connect(int compteur, SIGNAL(valueChanged(int)), m_pb, SLOT(setValue(int)));
          

          C'est incorrect, la variable "compteur" est de type int donc elle ne peut pas émettre un signal, ce ne sont que les classes de Qt qui peuvent le faire. Alors il faudra créer un signal personnalisé de ta classe "MaFenetre", pour cela dans la définition ajoute ça :
          #ifndef DEF_MAFENETRE
          #define DEF_MAFENETRE
          
          #include <QApplication>
          #include <QWidget>
          #include <QPushButton>
          #include <QProgressBar>
          #include <QSlider>
          #include <QLCDNumber>
          
          class MaFenetre : public QWidget
          {
              public:
              MaFenetre();
          
              public signal :
              void valeurCompteurChangee(int nouvelleValeur);
          
              private:
              QProgressBar *m_pb;
              int compteur;
              QLCDNumber *m_lcd;
          };
          
          
          #endif
          

          Ensuite tu émets le signal en utilisant une boucle de manière à changer la valeur de la QProgressBar selon la valeur de la variable "compteur" incrémentée en chaque tour de la boucle :
          #include "Fenetre.h"
          
          MaFenetre::MaFenetre() : QWidget()
          {
              int compteur = 0;
          
              setFixedSize(200, 100);
          
              m_pb = new QProgressBar(this);
              m_pb->setGeometry(10, 10, 190, 40);
              QObject::connect(this, SIGNAL(valeurCompteurChangee(int)), m_pb, SLOT(setValue(int)));
           
              while (compteur < 100)
              {
                  emit valeurCompteurChangee(compteur);
                  compteur++;
              }
          }
          


          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            28 novembre 2008 à 17:38:08

            La je comprend déjà un peu mieu :)
            • Partager sur Facebook
            • Partager sur Twitter

            Progréss Bar QT boucle

            × 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