IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Qt::connect: no such slot ...


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 4
    Par défaut Qt::connect: no such slot ...
    Bonjour,

    Je souhaite creer un affichage dynamique sous Qt. Pour cela, j'ai cree une classe GroupCcuRedundancy qui cree et qui affiche un groupe de bouton. Toutefois, lorsque je veux connecter une methode via connect, j'obtiens lors de l'execution l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QObject::connect: No such slot QGroupBox::redundancyChangeOutput()
    QObject::connect:  (sender name:   'ccuRedundancyCcuOutputBButton')
    QObject::connect:  (receiver name: 'ccuRedundancyCCUGroup6')
    La classe proprement dite est la suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    class GroupCcuRedundancy: public QGroupBox {
    private:
         QRadioButton *ccuRedundancyCcuOutputAButton_ ;
    public:
       GroupCcuRedundancy ( ) {
            // creation
            // affichage
            connect( ccuRedundancyCcuInputAButton_,  SIGNAL( pressed() ), this, SLOT( redundancyChangeInput( ) ) );
       }
     
    public slots:
      void redundancyChangeInput( ) {    
        std::cout << "redundancyChangeInput for CCU " << std::endl ;
      }
    } // Fin de classe
    La compilation se passe sans erreur mais je trouve l'erreur ci-dessus lors de l'execution.

    Pouvez-vous m'aider s'il vous plait

    Merci par avance

    Frederic

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    QGroupBox::redundancyChangeOutput
    Je sais pas trop pourquoi il va le chercher dans QGroupBox. Essaye voir:
    connect( ccuRedundancyCcuInputAButton_, SIGNAL( pressed() ), this, SLOT( GroupCcuRedundancy::redundancyChangeInput( ) ) );

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 4
    Par défaut
    Merci mais non, j'ai le meme probleme (j'ai aussi essaye this):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QObject::connect:  (sender name:   'ccuRedundancyCcuOutputAButton')
    QObject::connect:  (receiver name: 'ccuRedundancyCCUGroup6')
    QObject::connect: No such slot QGroupBox::GroupCcuRedundancy::redundancyChangeOutput()
    Il fait toujours reference a QGroupBox.

    J'ai aussi essayer d'enlever l'heritage et de declarer le QGroupBox comme attribut et la j'ai une erreur de compilation sur un autre connect de mon code qui ne pose pas de probleme dans le cas de l'heritage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class GroupCcuRedundancy {
    private:
         QGroupBox *qGroupBox_ ;
         QRadioButton *ccuRedundancyCcuOutputAButton_ ;
         QRadioButton *ccuRedundancyCcuOutputBButton_ ;
    public:
       GroupCcuRedundancy ( ) {
            // creation
            // affichage
     
            // Connect pour un toggle
           connect( ccuRedundancyCcuInputAButton_, SIGNAL( pressed() ), ccuRedundancyCcuInputBButton_, SLOT( toggle() ) );
     
            // Connect original qui est celui que je souhaite resoudre
            connect( ccuRedundancyCcuInputAButton_,  SIGNAL( pressed() ), this, SLOT( redundancyChangeInput( ) ) );
       }
     
    public slots:
      void redundancyChangeInput( ) {   
        std::cout << "redundancyChangeInput for CCU " << std::endl ;
      }
    } // Fin de classe
    et la compile me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GroupCcuRedundancy.h:123: invalid conversion from `QRadioButton*' to `int'
    GroupCcuRedundancy.h:123: cannot convert `const char*' to `const sockaddr*' for
       argument `2' to `int connect(int, const sockaddr*, unsigned int)'
    la ligne 123 etant le premier connect qui ne pose pas de probleme quant a l'heritage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connect( ccuRedundancyCcuInputAButton_, SIGNAL( pressed() ), ccuRedundancyCcuInputBButton_, SLOT( toggle() ) );
    Merci encore

    Frederic

    PS : juste une question subsidaire, dans la previsulation de mon message, j'ai toujours les balises code /code et non pas le rendu. Je fais quelquwe de chose mal ?

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par fdrouhin
    PS : juste une question subsidaire, dans la previsulation de mon message, j'ai toujours les balises code /code et non pas le rendu. Je fais quelquwe de chose mal ?
    C'est parce que tu as coché Désactiver le BBCode dans ce message au moment de la réponse.

    Je viens de tilter : il manquerait pas un ch'ti Q_OBJECT quelque part

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 4
    Par défaut
    Au risque de paraitre stupide, a quel niveau je dois ajouter un Q_OBJECT , je ris jaune ...

    Merci pour ton aide

    et effecitvement, j'avais le "Désactiver le BBCode dans ce message"

    Merci encore

  6. #6
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut
    dans la déclaration de ta classe.
    Tu devrais aller voir la doc en ligne de trolltech qui est plutôt bien faite, tu y trouveras tout ce que tu veux.
    http://www.trolltech.com

  7. #7
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Quand tu définis des slots, tu n'utilises plus du C++ standard. Il faut passer ton code à la moulinette avec moc, et pour qu'il le fasse il faut mettre un Q_OBJECT au début de ta classe.
    http://qt.developpez.com/doc/3.3/signalsandslots/
    Prend le temps de comprendre, c'est la base de Qt.

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 4
    Par défaut
    Tout d'abord merci pour toutes les infos.

    J'ai finalement declare le Q_OBJECT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    class GroupCcuRedundancy: public QGroupBox {
      Q_OBJECT
    private:
      QRadioButton *ccuRedundancyCcuOutputAButton_ ;
    public:
      GroupCcuRedundancy ( keyType index, QPoint pos, int position, QWidget * parent = 0, const char * name = 0 ) {
         // creation
         // affichage
         // evenements
         connect( ccuRedundancyCcuInputAButton_,  SIGNAL( pressed() ), this, SLOT( redundancyChangeInput( ) ) );
      }
    public slots:
      void redundancyChangeInput( ) {
        std::cout << "redundancyChangeInput for CCU " << std::endl ;
      }
    };
    ensuite, il faut relancer qmake Projet.pro, sinon vous avez l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    : undefined reference to `vtable for GroupCcuRedundancy'
    et finalement relancez votre makefile.

    Merci a tout ceux qui ont repondu.

    Frederic

  9. #9
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Oui, car il faut "mocer" ton fichier .h, et ça qmake sait le détecter et va te générer ce qu'il faut.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Qt::connect: no such slot
    Par MarcelBeaudoin dans le forum Débuter
    Réponses: 4
    Dernier message: 07/03/2015, 18h45
  2. Réponses: 5
    Dernier message: 21/11/2014, 21h40
  3. connect: No such slot
    Par scoutiste dans le forum Débuter
    Réponses: 6
    Dernier message: 05/09/2013, 16h13
  4. connect Signal et slot perso
    Par freecircus dans le forum Qt
    Réponses: 3
    Dernier message: 13/12/2006, 20h25
  5. QObject::connect: No such slot
    Par guepe dans le forum Qt
    Réponses: 2
    Dernier message: 22/12/2005, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo