Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt], fermer le prog lorsque slider vaut 60

slider est de type QSlider

Sujet résolu
    9 juin 2007 à 22:23:06

    Bonjour à tous.
    Mon but est de fermer le programme lorsque la valeur de slider vaut 60.
    Voici le code (pris dans la doc de Qt) :

    #include <QApplication>
     #include <QFont>
     #include <QLCDNumber>
     #include <QPushButton>
     #include <QSlider>
     #include <QVBoxLayout>
     #include <QWidget>

     class MyWidget : public QWidget
     {
     public:
         MyWidget(QWidget *parent = 0);
     };

     MyWidget::MyWidget(QWidget *parent)
         : QWidget(parent)
     {
         QPushButton *quit = new QPushButton(tr("Quit"));
         quit->setFont(QFont("Times", 18, QFont::Bold));

         QLCDNumber *lcd = new QLCDNumber(2);
         lcd->setSegmentStyle(QLCDNumber::Filled);

         QSlider *slider = new QSlider(Qt::Horizontal);
         slider->setRange(0, 99);
         slider->setValue(0);

         connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
         connect(slider, SIGNAL(valueChanged(int)),
                 lcd, SLOT(display(int)));

         QVBoxLayout *layout = new QVBoxLayout;
         layout->addWidget(quit);
         layout->addWidget(lcd);
         layout->addWidget(slider);
         setLayout(layout);
     }

     int main(int argc, char *argv[])
     {
         QApplication app(argc, argv);
         MyWidget widget;
         widget.show();
         return app.exec();
     }


    J'obtient ça :

    Image utilisateur

    Je voudrai donc que quand la valeur est 60 , le programme se ferme, j'ai essayer ça mais sans succès :

         if (slider->value() == 60)
         {
         exit(0);
         }


    ou même :

      connect(slider, SIGNAL(valueChanged(60)), qApp, SLOT(quit()));


    Une petite aide ne serait pas de refus, merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      10 juin 2007 à 0:06:43

      mywidget.h
      #include <QFont>
       #include <QLCDNumber>
       #include <QPushButton>
       #include <QSlider>
       #include <QVBoxLayout>
       #include <QWidget>

       class MyWidget : public QWidget
       {
       Q_OBJECT

       public slots:
           void GetSliderValue(int); // récupération de la valeur du slider

       public:
           MyWidget(QWidget *parent = 0);
       };


      mywidget.cpp
      #include "mywidget.h"
      MyWidget::MyWidget(QWidget *parent)
           : QWidget(parent)
       {
           QPushButton *quit = new QPushButton(tr("Quit"));
           quit->setFont(QFont("Times", 18, QFont::Bold));

           QLCDNumber *lcd = new QLCDNumber(2);
           lcd->setSegmentStyle(QLCDNumber::Filled);

           QSlider *slider = new QSlider(Qt::Horizontal);
           slider->setRange(0, 99);
           slider->setValue(0);

           connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
           connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
           connect(slider, SIGNAL(valueChanged(int)), thid, SLOT(GetSliderValue(int))); // connexion du slot

           QVBoxLayout *layout = new QVBoxLayout;
           layout->addWidget(quit);
           layout->addWidget(lcd);
           layout->addWidget(slider);
           setLayout(layout);
       }

      void MyWidget::GetSliderValue(int v)
      { // définition du slot
          if(v == 60) // si 60
          {
              qApp->quit(); // on quitte
          }
      }


      main.cpp

      #include <QApplication>
      int main(int argc, char *argv[])
       {
           QApplication app(argc, argv);
           MyWidget widget;
           widget.show();
           return app.exec();
       }


      n'oublie pas d'appliquer "moc" sur le fichier "mywidget.h"
      • Partager sur Facebook
      • Partager sur Twitter
        10 juin 2007 à 0:37:33

        Ou peut etre émmetre un signal "valeur du slider = 60" et y affecter un slot quit(). Je pense que ça doit être réalisable avec les connections du framework.
        • Partager sur Facebook
        • Partager sur Twitter
          10 juin 2007 à 0:42:19

          Citation : UltimAKnighT

          Ou peut etre émmetre un signal "valeur du slider = 60" et y affecter un slot quit(). Je pense que ça doit être réalisable avec les connections du framework.


          non faut connecter le signal "valeur modifiée" du slider à un slot et dans se slot mettre "si valeur = 60 alors quitter" (ce que j'ai fais)
          • Partager sur Facebook
          • Partager sur Twitter
            10 juin 2007 à 11:00:34

            oui, c'est vrai que côté signal y'a tres peu de liberté... c'est dommage.
            • Partager sur Facebook
            • Partager sur Twitter
              10 juin 2007 à 11:01:16

              Okay merci ! ça marche.
              Sauf que quelque erreurs s'étaient glissé par exemple mettre le pointeur "thid" au lieu de "this".
              Puis un oublie #include... bref
              résolu.
              • Partager sur Facebook
              • Partager sur Twitter
                10 juin 2007 à 19:51:30

                Citation : UltimAKnighT

                oui, c'est vrai que côté signal y'a tres peu de liberté... c'est dommage.


                au contraire il y en a beaucoup. c'est presque la même chose qu'une simple fonction callback mais sans les inconvénients.
                • Partager sur Facebook
                • Partager sur Twitter
                  10 juin 2007 à 20:44:57

                  Ce n'est pas ce à quoi je pensais :) , bref si il a réussis ça n'a plus d'importance.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [Qt], fermer le prog lorsque slider vaut 60

                  × 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