Partage
  • Partager sur Facebook
  • Partager sur Twitter

Signal - Slot invalide

Sujet résolu
    31 mai 2008 à 14:25:46

    Bonjour tout le monde!
    Avec le TP Qt de M@teo, je voudrais sauvegarder mes informations dans des fichiers .h et .cpp mais mes slots ne marchent pas!

    Pour tester si ils marchaient, j'ai fait un return qui me quitterai la fenetre contenant le bouton à appuyer " Sauvegarder " mais rien ne ce passe!

    FenCode.h

    class FenCode : public QDialog
    {
        Q_OBJECT
        
        public:
        FenCode(QString &codeh, QString &codecpp, QString nom, QWidget *parent);
        
        public slots:
        void sauvegarder(QString codeh, QString codecpp);
     
        private:
        QTextEdit *genereh;
        QTextEdit *generecpp;
        QPushButton *sauverh;
        QPushButton *sauvercpp;
        QPushButton *quitterh;
        QPushButton *quittercpp;    
    };
     
    #endif
    


    FenCode.cpp

    FenCode::FenCode(QString &codeh, QString &codecpp, QString nom, QWidget *parent) : QDialog(parent)
    {
         setFixedSize(275,260);
         QTabWidget *tab = new QTabWidget(this);
         QWidget *fichierh = new QWidget();
         QWidget *fichiercpp = new QWidget();
         tab->addTab(fichierh, nom+".h");
         tab->addTab(fichiercpp, nom+".cpp");
         
         //fichierh
         genereh = new QTextEdit;
         genereh->setReadOnly(1);
         genereh->setPlainText(codeh);
         sauverh = new QPushButton("Sauvegarder");
         quitterh = new QPushButton("Fermer");
         QVBoxLayout *ensembleh = new QVBoxLayout;
         QHBoxLayout *buttonh = new QHBoxLayout;
         buttonh->addWidget(sauverh); 
         buttonh->addWidget(quitterh); 
         ensembleh->addWidget(genereh);
         ensembleh->addLayout(buttonh);
         ensembleh->setSizeConstraint(QLayout::SetFixedSize);
         fichierh->setLayout(ensembleh);
         
         QObject::connect(quitterh, SIGNAL(clicked()), this, SLOT(accept()));
         QObject::connect(sauverh, SIGNAL(clicked()), this, SLOT(sauvegarder(codeh, codecpp)));
         
         //fichiercpp
         generecpp = new QTextEdit;
         generecpp->setReadOnly(1);
         generecpp->setPlainText(codecpp);
         sauvercpp = new QPushButton("Sauvegarder");
         quittercpp = new QPushButton("Fermer");
         QVBoxLayout *ensemblecpp = new QVBoxLayout;
         QHBoxLayout *buttoncpp = new QHBoxLayout;
         buttoncpp->addWidget(sauvercpp); 
         buttoncpp->addWidget(quittercpp); 
         ensemblecpp->addWidget(generecpp);
         ensemblecpp->addLayout(buttoncpp);
         ensemblecpp->setSizeConstraint(QLayout::SetFixedSize);
         fichiercpp->setLayout(ensemblecpp);
         
         QObject::connect(quittercpp, SIGNAL(clicked()), this, SLOT(accept()));
         QObject::connect(sauvercpp, SIGNAL(clicked()), this, SLOT(sauvegarder(codeh, codecpp)));
    }
    
    void FenCode::sauvegarder(QString codeh, QString codecpp)
    {
         return; //<---- rien ne ce se passe, normalement sa devrai quitter FenCode 
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      31 mai 2008 à 14:29:59

      Je dis sa comme sa, mais je crois pas qu'on puisse mettre un return sans rien !

      essaye return EXIT_SUCCESS
      • Partager sur Facebook
      • Partager sur Twitter
        31 mai 2008 à 14:34:09

        Non, cela ne compile pas car EXIT_SUCCESS est une valeur or un void ne doit pas retourner de valeur
        Pour faire plus clair je redonne ma fonction corriger ( mais le slot ne marche toujours pas )

        sauvegarder
        void FenCode::sauvegarder(QString codeh, QString codecpp)
        {
             exit(1);
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          31 mai 2008 à 14:35:23

          Si c'est un void on peut pas mettre de return du tout !

          A moin que je me trompe...

          Essaye avec un int
          • Partager sur Facebook
          • Partager sur Twitter
            31 mai 2008 à 14:36:33

            Citation : Lecureuil

            Je dis sa comme sa, mais je crois pas qu'on puisse mettre un return sans rien !

            essaye return EXIT_SUCCESS


            n'importe quoi.
            C'est souvent utilisé pour mettre fin à une fonction. Mais le mieux est tout de même void après tout dépend du sujet.
            Et puis je ne vois pas de return.
            Sinon si il parle de celui du main il faut que tu aye voir le tuto. Mais je ne pense pas que se soit ça.

            QObject::connect(sauverh, SIGNAL(clicked()), this, SLOT(sauvegarder(codeh, codecpp)));
            

            ici est l'erreur retourne voir le tuto de matheo au moment où il apprend à créer les slots perso.
            • Partager sur Facebook
            • Partager sur Twitter
            :)
              31 mai 2008 à 14:39:27

              Ben j'ai relu les cours de M@teo ainsi que la doc Qt mais je trouve pas, je sais que c'est dans mon connect ou dans les environs mais je sais pa où
              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2008 à 14:48:24

                bon c'est exact il a oublié de spécifier que le slot et le signal doit avoir le même nombre de paramètre et le meme type. Sinon ça marche pas.
                Donc du coups tu devrais meme avoir une erreur de compilation.il faut donc que ton slot n'est aucun paramètre.
                • Partager sur Facebook
                • Partager sur Twitter
                :)
                  31 mai 2008 à 14:50:43

                  Merci moii, je pouvais pas le deviner ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 mai 2008 à 14:52:21

                    Même avec un EXIT_SUCCESS ça ne marcherais pas car EXIT_SUCCESS est un macro de valeur 0 donc si on fais un return EXIT_SUCCESS ça renvéras juste la valeur 0 ce qui ne sert à rien.
                    Comme le dit Lecureuil un void ne peux RIEN retourner, donc même un return tous seul ne doit pas marcher.
                    Aussi c'est normale que :
                    QObject::connect(sauvercpp, SIGNAL(clicked()), this, SLOT(sauvegarder(codeh, codecpp)));
                    }
                    

                    Ne marche pas seul un signal peux avoir plus d'argument qu'un slot mais pas l'inverse fais une surcharge de slot si tu veux aussi l'utiliser autre par.


                    Oups moii l'as déjà dit mais un signal peux avoir plus d'argument qu'un slot ( j'ai l'impression d'avoir déjà dit ça :p )
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      31 mai 2008 à 14:57:51

                      return; marche uniquement si la fonction renvoie un void mais il marche!!!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 mai 2008 à 16:10:27

                        Ha je vois c'est juste pour quitter la fonction.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Signal - Slot invalide

                        × 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