Partage
  • Partager sur Facebook
  • Partager sur Twitter

No maching function for call.....

Q_OBJECT

Sujet résolu
    13 juin 2008 à 18:37:01

    Bonjour,

    Lors de la compilation de mon programme, j'obtiens cette erreur à propos d'un "connect":

    Citation : make

    main.cpp:52: erreur: no matching function for call to «QObject::connect(QPushButton&, const char [11], const char [13])»



    Pourquoi ce bug???

    Main.cpp:
    #include <iostream>
    #include <QApplication>
    #include <QObject>
    #include <QWidget>
    #include <QtGui>
    #include "fonctions.h"
    
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        QWidget fenetre;
    
        fenetre.setWindowTitle("Prog");
        fenetre.setFixedSize(190, 180);
    
        QString *text;
        QTextEdit *code;
        code = new QTextEdit;
    
        QGroupBox *groupbox = new QGroupBox("Que souhaitez vous faire?", &fenetre);
    
        QRadioButton *compresser = new QRadioButton("A");
        QRadioButton *decompresser = new QRadioButton("B");
        QPushButton validation("OK!!!", &fenetre);
        validation.move(60, 130);
    
        QString filename = QFileDialog::getOpenFileName();
        QFile file(filename);
        //Chargement du fichier
        if (!file.open(QFile::ReadOnly | QFile::Text)) {
            std::cout<<"Erreur";
         }
    
         QTextStream in(&file);
         QApplication::setOverrideCursor(Qt::WaitCursor);
         code->setPlainText(in.readAll());
         QApplication::restoreOverrideCursor();
    
    
        compresser->setChecked(true);
    
        QVBoxLayout *vbox = new QVBoxLayout;
        vbox->addWidget(compresser);
        vbox->addWidget(decompresser);
    
        groupbox->setLayout(vbox);
        groupbox->move(5, 5);
    
        //Connexion du bouton avec le SLOT de choix
        QObject::connect(validation, SIGNAL(clicked()), SLOT(selection()));
    
    
        fenetre.show();
    
        return app.exec();
    }
    


    Le SLOT se trouve dans "fonctions.h/.cpp", déclaré comme ceci dans "fonctions.h"
    #ifndef INCLUDE_FONCTION
    #define INCLUDE_FONCTION
    
    #include <iostream>
    #include <QApplication>
    #include <QWidget>
    #include <QtGui>
    #include <QObject>
    #include "fonctions.h"
    
    class fonctions : QWidget{
    
        Q_OBJECT
    
        public slots:
        void selection();
    
    };
    
    #endif
    


    Quel est le problème?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Un traitement de texte léger, rapide et fiable : DadaWord (ou sur GitHub)
      13 juin 2008 à 18:54:24

      bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoCompatConnection )
      


      Voilà la signature de connect(). Je crois qu'il te manque un paramètre...
      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2008 à 18:58:53

        je pense que ton erreur se trouve dans ton utilisation de la fonction connect.

        connect( émetteur , SIGNAL( signal() ), récepteur , SLOT( slot() ) );

        Par contre avec ta façon de découper je ne sais pas trop comment faire. Il faudrait que tu créer une classe fenêtre avec ton slot dedans plutôt que mettre tes fonctions à part et créer la fenêtre dans la main.
        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2008 à 19:01:24

          Validation n'est pas un pointeur or on t'en demande un dans connect donc en gros voici ce qu'il faut mettre:
          QObject::connect(&validation, SIGNAL(clicked()), SLOT(selection()));
          
          • Partager sur Facebook
          • Partager sur Twitter
          :)
            13 juin 2008 à 19:11:16

            Citation : moii

            Validation n'est pas un pointeur or on t'en demande un dans connect donc en gros voici ce qu'il faut mettre:

            QObject::connect(&validation, SIGNAL(clicked()), SLOT(selection()));
            


            Ça ne fonctionnera pas plus: il manque un pointeur sur le récepteur entre le signal et le slot.
            • Partager sur Facebook
            • Partager sur Twitter
              13 juin 2008 à 19:23:10

              à oui pardon.
              QObject::connect(&validation, SIGNAL(clicked()),this, SLOT(selection()));
              
              • Partager sur Facebook
              • Partager sur Twitter
              :)

              No maching function for call.....

              × 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