Partage
  • Partager sur Facebook
  • Partager sur Twitter

Qt - problème lors de la creation d'un signal

Sujet résolu
    18 juin 2008 à 15:59:42

    Bonjour à tous.

    Voilà en fait j'aimerai utiliser un QLabel avec une image comme un gros bouton. Pour cela j'ai créé un signal en utilisant un évènement, car le signal "clicked" n'existe pas pour le QLabel. Le seul problème c'est que le signal semble fonctionner quand je l'applique à la fenêtre principale FenPrincipale, mais pas quand je veux l'appliquer au QLabel????

    Je ne comprend pas trop... :o Je ne sais pas si le problème se situe dans le .h ou bien dans le .cpp

    Le code du fichier .h
    #ifndef HEADER_FENPRINCIPALE
    #define HEADER_FENPRINCIPALE
    
    #include <QtGui>
    
    
    class FenPrincipale : public QWidget
    {
    
            Q_OBJECT
    
    
        public:
            FenPrincipale();
    
        protected:
            void mouseReleaseEvent(QMouseEvent *event);
    
        private:
            QLabel *mon_Label;
    
        signals:
            void mon_Label_click();
    
    };
    
    #endif


    le code du .cpp

    #include "FenPrincipale.h"
    
    
    FenPrincipale::FenPrincipale()
    {
    
        setGeometry(50,50,800,800);
    
        mon_Label = new QLabel(this);
        mon_Label->setPixmap(QPixmap("Button/test.jpg"));
        mon_Label->setGeometry(10,100, 400,300);
    
        QObject::connect(mon_Label,SIGNAL(mon_Label_click()),this,SLOT(quit()));
    
    }
    
    
    void mouseReleaseEvent(QMouseEvent *event)
    
    {
    
    if (event->button() == Qt::RightButton)
        emit mon_Label_click();
    
    }


    Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2008 à 16:06:13

      salut,
      si tu veux créer un signal pour le QLabel, il faut que tu dérives la classe QLabel,et que tu réimplémentes ton signal dans cette classe, et non dans ta fenêtre
      en espérant t'avoir aidé
      L_L
      • Partager sur Facebook
      • Partager sur Twitter
        18 juin 2008 à 16:16:55

        Oui d'accord je m'en doutais un peu, mais le seul problème, c'est que ne je sais pas trop comment faire :p

        En fait j'essaie d'apprendre le langage C++ et Qt en même temps :-°
        • Partager sur Facebook
        • Partager sur Twitter
          18 juin 2008 à 16:31:01

          c'est le même principe que pour le QWidget
          un peu de code pour t'aider , voici à quoi pourrait ressembler un début .h pour la classe MonLabel.

          class MonLabel : public QLabel
          {
             Q_OBJECT
             
             public:
             MonLabel(QWidget *parent = 0); // Ici on réimplémente le constructeur
          
             signals:
             void clicked(); // et là le signal
          }
          


          pour le constructeur ca donnerait quelque chose comme ca :

          MonLabel::MonLabel(QWidget *parent) : QLabel(parent)
          {}
          


          il te reste le signal a implémenté mais la méthode est la même que dans ton premier code sauf qu'ici on l'applique au label et non a la fenêtre
          apres, quand tu veux utiliser ton label, il te suffit de remplacer "QLabel" par "MonLabel"

          si tu ne comprends pas ce code, je te conseille de bien relire le chapitre sur l'héritage
          • Partager sur Facebook
          • Partager sur Twitter
            18 juin 2008 à 19:43:00

            Si tu veux faire un une image cliquable (ton premier post) il te faudra dériver de QAbstractButton et te faire ton propre bouton.
            Il te faudra utiliser aussi QPainter pour dessiner le bouton.
            Voilà voilou
            • Partager sur Facebook
            • Partager sur Twitter
            :)
              19 juin 2008 à 19:25:15

              Parfait ça marche :lol:

              Merci :D
              • Partager sur Facebook
              • Partager sur Twitter

              Qt - problème lors de la creation d'un signal

              × 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