Partage
  • Partager sur Facebook
  • Partager sur Twitter

QProgressBar et QSlider en QT

Impossible de voir l'avancée dans la QProgressBar

Sujet résolu
    21 mai 2020 à 19:17:19

    Bonjour/bonsoir à tous :)

    Il y a des années que je viens sur ce site, qui d'ailleurs était encore le SDZ, mais c'est un premier post pour moi.

    Je créé ce post car j'ai plutôt pas mal cherché mais rien n'a solutionné mon soucis. 

    Je suis en train de suivre le cours sur QT, et bien évidemment j'ai un soucis au niveau de QProgressBar qui est connecté à m_slider (QSlider). Je sais pertinemment que ce sujet a fait couler de l'encre (à cristaux liquide^^) mais même en copiant des exemples qui fonctionnaient, eh bien, à ma grande déception, cela ne fonctionnait pas...

    Je vous joint mon code, qui est tout simple :

    #include <QWidget>
    #include "Mafenetre.h"
    #include <QSlider>
    #include <QProgressBar>
    
    MaFenetre::MaFenetre() : QWidget()
    {
        setFixedSize(200, 100);
    
        m_barre = new QProgressBar(this);
        m_barre->setGeometry(50, 20, 150, 20);
    
        m_slider = new QSlider(Qt::Horizontal, this);
        m_slider->setGeometry(10, 60, 150, 20);
        m_slider->setRange(0, 100);
    
        QObject::connect(m_slider, SIGNAL(valueChanged(int)), m_barre, SLOT(setvalue(int)));
    }
    


    voici le Header:

    #ifndef MAFENETRE_H
    #define MAFENETRE_H
    
    #include <QApplication>
    #include <QWidget>
    #include <QSlider>
    #include <QProgressBar>
    
    class MaFenetre : public QWidget //héritage de QWidget
    {
    
    public:
        MaFenetre(); // fonction en public
    
    
    public slots:
    
    
    private:
        QSlider *m_slider;
        QProgressBar *m_barre;
    };
    
    #endif // MAFENETRE_H

    et le main :

    #include <QApplication>
    #include "Mafenetre.h"
    
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        MaFenetre fenetre;
        fenetre.show();
    
        return app.exec();
    }
    

    Je n'ai pas mis le code avec QLCDNumber, mais cela dit, lorsque je bougeais le m_slider, le LCD affichais bien la progression en LCD.

    Avec ce code, lorsque je bouge mon m_slider, ma barre (m_barre) ne progresse pas d'un poil.

    J'ai pensé au setRange(0, 100); sur m_barre, mais cela ne change rien et d'ailleurs il est déjà sur le m_slider donc il doit être "synchro" au moment de la connection.

    Ai-je oublié quelque chose ? J'ai regardé la doc entre les signaux proposé par QSLIDER et les SLOT de la QProgressBar mais rien :/

    Avez vous une idée ?

    Merci d'avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2020 à 23:12:09

      Bonjour. 2 choses à modifier.

      Dans ton .h, juste avant ton public: ajoutes la macro, sinon tu ne pourras pas gérer les signaux/slots:

          Q_OBJECT

      dans ton constructeur, pour faire le connect, fais plutot comme ça:

       QObject::connect(m_slider,&QSlider::valueChanged,m_barre,&QProgressBar::setValue);




      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2020 à 11:06:23

        Hey, bonjour, 

        Merci de ces petites infos.

        Par contre "petite" question. Le fameux Q_OBJECT ça n'est pas seulement si l'on doit créer un SIGNAL/SLOT personnalisé?

        Autre question : mon connect était finalement faux ? Car je vois qu'on a changé le code en mettant les :: de résolution de portée. Mais mes m_slider et m_barre font déjà parties des classes mentionnées avant les :: non ?

        Ensuite on a passé le & ici devant QSlider et Qprogressbar, on a passé l'adresse des pointeurs de m_slider et m_barre ? Je n'ai peut être pas saisi pourquoi :/

        Cependant cela fonctionne bien même sans le Q_OBJECT. 

        Merci grandement :D

        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2020 à 12:46:49

          Cela fait un moment que la syntaxe a changée pour être plus flexible et intégrer , entre autre, les lambdas.

          Voir:

          https://doc.qt.io/qt-5/signalsandslots.html

          -
          Edité par bxdfr 23 mai 2020 à 12:47:25

          • Partager sur Facebook
          • Partager sur Twitter
            23 mai 2020 à 14:19:46

            Merci à toi bxdfr !

            Ce n'est peut-être pas grand chose pour certain mais pour moi c'est une grande avancée !!

            je met en résolu !

            A la prochaine ^^

            • Partager sur Facebook
            • Partager sur Twitter

            QProgressBar et QSlider en QT

            × 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