Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] SLOT fait à l'arrache qui ne marche pas...

    9 mars 2008 à 0:32:18

    Bonjour,

    je suis (verbe suivre) actuellement le tutoriel C++ de M@téo et je suis arrivé au niveau des Signaux et Slots. Pour le moment, tout allait bien mais lorsque je décide de faire un truc plus avancé, ça plante.

    J'ai tenté de faire un setValue qui prendrait l'attribut value et qui l'incrementerai (du style setValue(value()++) ). Mais a la compilation on me renvois l'erreur suivante :
    Object::connect: No such slot QProgressBar::setValue(m_barre->value()++)

    J'ai pensé que les Slots devaient etre formaté d'une manière précise mais même lorsque je fait un int i = 0; et que je met setValue(i) ça ne change pas, j'ai la même erreur.

    Voici mon code (MaFenetre.cpp) :
    1. setFixedSize(300, 200);
    2.         m_barre = new QProgressBar(this);
    3.         m_barre->setGeometry(5, 5, 200, 20);
    4.         m_plus = new QPushButton("Plus", this);
    5.         m_plus->setFont(QFont("Comic Sans MS", 14));
    6.         m_plus->move(5, 30);
    7.         QObject::connect(m_plus, SIGNAL(clicked()), m_barre, SLOT(setValue(m_barre->value()++)));
    8.         m_moins = new QPushButton("Moins", this);
    9.         m_moins->setFont(QFont("Comic Sans MS", 14));
    10.         m_moins->move(5, 70);
    11.         QObject::connect(m_moins, SIGNAL(clicked()), m_barre, SLOT(setValue(m_barre->value()--)));
    12.         m_raz = new QPushButton("Remise à zéro", this);
    13.         m_raz->setFont(QFont("Comic Sans MS", 14));
    14.         m_raz->move(5, 110);
    15.         QObject::connect(m_raz, SIGNAL(clicked()), m_barre, SLOT(reset()));
    16.         m_quitter = new QPushButton("Quitter", this);
    17.         m_quitter->setFont(QFont("Comic Sans MS", 14));
    18.         m_quitter->move(5, 150);
    19.         QObject::connect(m_quitter, SIGNAL(clicked()), qApp, SLOT(quit()));


    Merci d'avance,
    -= AmeniA =-
    • Partager sur Facebook
    • Partager sur Twitter
      9 mars 2008 à 1:10:58

      <quote>compilation on me renvois l'erreur suivante :
      Object::connect: No such slot QProgressBar::setValue(m_barre->value()++)</quote>

      je pense pas qu'on puisse faire sa
      • Partager sur Facebook
      • Partager sur Twitter
        9 mars 2008 à 1:12:26

        Ha ouai ? J'avais pas remarqué...


        Je demandais surtout comment contourner le problème.
        • Partager sur Facebook
        • Partager sur Twitter
          9 mars 2008 à 1:21:14

          à part créer ta propre classe héritant de QProgressBar et définissant une méthode "diminiuer()" et "augmenter()" (ou bien une seul méthode prenant un modificateur relatif, genre "setRelativeValue(-1)" pour diminuer de 1..)...

          je vois pas trop d'autre solution(s).
          • Partager sur Facebook
          • Partager sur Twitter
          Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
            9 mars 2008 à 1:53:17

            Citation : shadosan

            (ou bien une seul méthode prenant un modificateur relatif, genre "setRelativeValue(-1)" pour diminuer de 1..)...


            impossible, comme clicked() n'a pas d'argument tu voudrais faire comment ? (slots obligé donc)
            tes deux slots diminuer() et augmenter() sont parfaits
            (on peut aussi faire plus court mais c'est plus poussé)
            • Partager sur Facebook
            • Partager sur Twitter
              9 mars 2008 à 2:08:43

              Ok donc je lis la suite du cours pour les slots perso...

              Merci beaucoup
              • Partager sur Facebook
              • Partager sur Twitter
                9 mars 2008 à 2:27:57

                Citation : minirop

                impossible, comme clicked() n'a pas d'argument tu voudrais faire comment ? (slots obligé donc)

                ah oui, c'est vrai ^^;
                • Partager sur Facebook
                • Partager sur Twitter
                Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
                  9 mars 2008 à 12:08:08

                  Regarde dans le cours : si le signal reçois (int,int) tu peux pas lui envoyer un slot qui prend (QProgressBar, int) par exemple ...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 mars 2008 à 18:47:59

                    Ca marche merci :

                    MaFenetre.cpp
                    1. #include "MaFenetre.h"
                    2. MaFenetre::MaFenetre() : QWidget()
                    3. {
                    4.         setFixedSize(300, 200);
                    5.         m_barre = new QProgressBar(this);
                    6.         m_barre->setGeometry(5, 5, 200, 20);
                    7.         m_plus = new QPushButton("Plus", this);
                    8.         m_plus->setFont(QFont("Comic Sans MS", 14));
                    9.         m_plus->move(5, 30);
                    10.         QObject::connect(m_plus, SIGNAL(clicked()), this, SLOT(augmenter()));
                    11.         m_moins = new QPushButton("Moins", this);
                    12.         m_moins->setFont(QFont("Comic Sans MS", 14));
                    13.         m_moins->move(5, 70);
                    14.         QObject::connect(m_moins, SIGNAL(clicked()), this, SLOT(diminuer()));
                    15.         m_raz = new QPushButton("Remise à zéro", this);
                    16.         m_raz->setFont(QFont("Comic Sans MS", 14));
                    17.         m_raz->move(5, 110);
                    18.         QObject::connect(m_raz, SIGNAL(clicked()), m_barre, SLOT(reset()));
                    19.         m_quitter = new QPushButton("Quitter", this);
                    20.         m_quitter->setFont(QFont("Comic Sans MS", 14));
                    21.         m_quitter->move(5, 150);
                    22.         QObject::connect(m_quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
                    23. }
                    24. MaFenetre::~MaFenetre()
                    25. {
                    26.         delete  m_barre;
                    27.         delete m_quitter;
                    28.         delete m_raz;
                    29.         delete m_plus;
                    30.         delete m_moins;
                    31. }
                    32. void MaFenetre::augmenter()
                    33. {
                    34.         int i = m_barre->value();
                    35.         i++;
                    36.         m_barre->setValue(i);
                    37. }
                    38. void MaFenetre::diminuer()
                    39. {
                    40.         int i = m_barre->value();
                    41.         i--;
                    42.         m_barre->setValue(i);
                    43. }


                    Et voici MaFenetre.h
                    1. #ifndef DEF_MAFENETRE
                    2. #define DEF_MAFENETRE
                    3. #include <QtGui>
                    4. class MaFenetre : public QWidget
                    5. {
                    6.         public:
                    7.                 MaFenetre();
                    8.                 ~MaFenetre();
                    9.         public slots:
                    10.                 void augmenter();
                    11.                 void diminuer();
                    12.         private:
                    13.                 QProgressBar  *m_barre;
                    14.                 QPushButton *m_quitter;
                    15.                 QPushButton *m_raz;
                    16.                 QPushButton *m_plus;
                    17.                 QPushButton *m_moins;
                    18. };
                    19. #endif


                    Merci beaucoup

                    Je vais pouvoir incrémenter un petit lecteur multimédia bientôt.

                    -= AmeniA =-
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 mars 2008 à 19:18:09

                      Citation : Amenia

                      J'ai tenté de faire un setValue qui prendrait l'attribut value et qui l'incrementerai
                      [...]
                      Je vais pouvoir incrémenter un petit lecteur multimédia bientôt.


                      Euh :euh:





                      Quoi ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 mars 2008 à 20:00:03

                        Citation : Pas de titre

                        Je vais pouvoir incrémenter un petit lecteur multimédia bientôt.


                        je crois qu'il voulait dire "Je vais pouvoir implémenter un [...]" ou "Je vais pouvoir créer un [...]"
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!

                        [Qt] SLOT fait à l'arrache qui ne marche pas...

                        × 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