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 :

Connexion automatique : "No matching signal for on_choixRepertoire_triggered()"


Sujet :

Qt

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut Connexion automatique : "No matching signal for on_choixRepertoire_triggered()"
    Bonjour à tous.

    Je me trouve confronté à l'erreur suivante pour un auto-connect : No matching signal for on_choixRepertoire_triggered()

    Voici le .h qui défini le slot :
    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
     
    #ifndef INITDB_H
    #define INITDB_H
     
    #include <QDialog>
    #include <QLineEdit>
     
    class initdb : public QDialog
    {
     Q_OBJECT
    public:
        initdb();
     
    public slots:
        //void selectionnerRepertoire();
        void on_choixRepertoire_triggered();
     
    private:
        QLineEdit *m_repStockage;
        QLineEdit *m_nomFichier;
    };
     
    #endif // INITDB_H
    et son implémentation dans le .cpp
    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
     
    #include "initdb.h"
    #include <QPushButton>
    #include <...>
     
    initdb::initdb()
    {
        QMetaObject::connectSlotsByName(this);
    ...
     
        QToolButton *choixRepertoire = new QToolButton;
        choixRepertoire->setGeometry((QRect(290,60,25,19)));
        choixRepertoire->setText("...");
        //connect(choixRepertoire,SIGNAL(clicked(bool)),this, SLOT(selectionnerRepertoire()));
    ...
    }
     
    //void initdb::selectionnerRepertoire()
    void initdb::on_choixRepertoire_triggered()
    {
        m_repStockage->setText(QFileDialog::getExistingDirectory(this));
        qDebug() << m_repStockage->text() << m_nomFichier->text();
    }
    Si je comprends bien le message, le système ne trouverait pas le signal "triggered" correspondant.

    Pourtant un QToolButton envoie bien ce signal : void QToolButton::triggered(QAction *action).

    A noter que si j'active le slot "selectionnerRepertoire" à la place de l'auto-connect, tout fonctionne correctement.

    Auriez-vous une piste pour expliquer ce problème, car évidemment, je préfère utiliser un auto-connect plutôt que rajouter une ligne de code supplémentaire... comme certainement beaucoup de programmeurs.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si tu souhaites effectuer ta connexion avec connectSlotsByName(), il te faut nommer ton objet en conséquence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choixRepertoire->setObjectName("choixRepertoire");
    pour correspondre au nom de ton slot « on_choixRepertoire_triggered ».
    (Je le mentionne au cas où : la ligne QMetaObject::connectSlotsByName(this); est à déplacer après )

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 199
    Points : 103
    Points
    103
    Par défaut
    Merci pour cette réponse.

    Malheureusement, le résultat est identique.

    Je ne l'ai pas précisé, mais ce bouton est dans un onglet QTabWidget. Mais je ne pense pas que le problème se situe là dès lors qu'un connect classique fonctionne en lieu et place.

    Après, QMetaObject::connectSlotsByName cherche parmi les enfants et je me pose la question, tel que mon code est construit, si QToolButton *choixRepertoire est bien enfant de this ??? S'il ne l'est pas, alors il semble normal qu'il ne connecte pas.

    Par ailleurs, il ressort de mes recherches sur internet que la procédure d'auto-connect de Qt ne serait pas très fiable et qu'il vaut mieux utiliser un connect déclaré.

    Donc je vais privilégier cette dernière solution, qui ne coûte pas grand chose.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par KonTiKI Voir le message
    Après, QMetaObject::connectSlotsByName cherche parmi les enfants et je me pose la question, tel que mon code est construit, si QToolButton *choixRepertoire est bien enfant de this ??? S'il ne l'est pas, alors il semble normal qu'il ne connecte pas.
    Faudrait voir le reste du code. Mais si tu ne fais rien pour qu'il soit un descendant de this, alors non effectivement la connexion n'a aucune chance de se faire.

    Personnellement je n'ai jamais utilisé que la méthode avec connect(), donc je ne saurais me prononcer sur la fiabilité de connectSlotsByName().
    Mais je préfère nettement la nouvelle syntaxe C++11 de connect() qui donnera une erreur à la compilation si je fais mal les choses.

Discussions similaires

  1. [Cookies] Connexion automatique
    Par T0xF0x dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2005, 22h30
  2. Connexion automatique sur base SQL (Login/pass mémorisé)
    Par Fredo67 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/10/2005, 16h24
  3. [CR9][SQL Server] Connexion automatique
    Par PetitScarabe dans le forum Connectivité
    Réponses: 6
    Dernier message: 31/03/2005, 17h51

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