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 :

une erreur sur signal-slot


Sujet :

Qt

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 91
    Points : 47
    Points
    47
    Par défaut une erreur sur signal-slot
    connect(handler, SIGNAL(newItem(QVector<QPointF>)),
    this, SLOT(load_new_item(QVector<QPointF>)));

    error: no matching function for call to `MainWindow::connect(XmlHandler*&, const char*, MainWindow* const, const char*)'

    j'ai bien vérifié: handler est un pointeur de type XmlHandler.

    qq'un peut me dire ça vient d'où ce prb?

    Merci!

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tu peux montrer le .h et le .cpp avec declaration des differents signaux et slots.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Salut,

    Es tu sur que tes classes XmlHandler et MainWindow dérivent de QObject ?

    G.

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 91
    Points : 47
    Points
    47
    Par défaut
    Merci à tous

    xmlhandler est inclu dans mainwindow.h
    dans xmlhandler y a définition de signal newItem
    dans mainwindow y a slot load_new_item
    j'ai vérifié les fichiers .h bien inclu

    Je pense c'est parce que : XmlHandler hérite QXmlDefaultHandler et QXmlDefaultHandler n'hérite pas de QObject.

    J'ai essyé mais on peut pas résoudre ce prb en seulement héritant de QObject dans la déclaration de classe QXmlHandler non plus....ça m'a posé des prbs dans les fichiers moc..

    donc il faut changer le structure CAD n'utilise pas signal slot pour transferer les informations?

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Citation Envoyé par lansher1985 Voir le message
    Merci à tous
    Je pense c'est parce que : XmlHandler hérite QXmlDefaultHandler et QXmlDefaultHandler n'hérite pas de QObject.

    J'ai essyé mais on peut pas résoudre ce prb en seulement héritant de QObject dans la déclaration de classe QXmlHandler non plus....ça m'a posé des prbs dans les fichiers moc..
    Es tu sur ? Je pense qu'en faisant dérivé a la fois de QObject, et de QXmlDefaultHandler, ça peut marcher. Attention, il faut mettre QObject en premier;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class XmlHandler: public QObject, public QXmlDefaultHandler
    // et pas class XmlHandler: public QXmlDefaultHandler , public QObject
    // l'ordre est important dans certains cas
    Après, il se peut qu'il y ait des conflits de noms de méthodes ou ce genre de choses, mais ça doit pas être grand chose.

    G.

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 91
    Points : 47
    Points
    47
    Par défaut
    C'est exactement ça !
    J'ai pas mis les deux classes dans le bon ordre ^^
    c'est bon merci beaucoup!

    Et une question: pour quoi on doit lettre QObject avant QXmlDefaultHandler?

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Je ne saurais te répondre en détails, il est juste écrit dans la doc que le Meta Object Compiler (moc) exige que QObject soit mis en première position lorsqu'il y a héritage multiple.

    Multiple Inheritance Requires QObject to Be First

    If you are using multiple inheritance, moc assumes that the first inherited class is a subclass of QObject. Also, be sure that only the first inherited class is a QObject.

    // correct
    class SomeClass : public QObject, public OtherClass
    {
    ...
    };
    Virtual inheritance with QObject is not supported.
    Il y a quelques autres limitations, http://doc.qtsoftware.com/4.5/moc.html. Mais ça reste des cas particuliers.

    G.

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 91
    Points : 47
    Points
    47
    Par défaut
    merci beaucoup!

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 138
    Points : 163
    Points
    163
    Par défaut
    Citation Envoyé par lansher1985 Voir le message
    Et une question: pour quoi on doit mettre QObject avant QXmlDefaultHandler?
    Si il y a une fonction "connect" dans chacune des 2 classes, la fonction utilisée par défaut est celle de la classe qui a été mise avant (en premier en l'occurence)...

    Sinon il faut mettre

    QObject::connect(...)
    pour préciser que la fonction utilisée est celle de la classe "QObject" (par exemple)...

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 91
    Points : 47
    Points
    47
    Par défaut
    merci

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 138
    Points : 163
    Points
    163
    Par défaut
    Bah, tout le plaisir est pour moi...

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

Discussions similaires

  1. Application d'une erreur sur une combo
    Par Chicard dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/02/2009, 19h13
  2. Une erreur sur mon code
    Par gantix dans le forum Langage
    Réponses: 2
    Dernier message: 23/01/2009, 14h06
  3. capturer une erreur sur un import
    Par cysboy dans le forum Langage
    Réponses: 2
    Dernier message: 09/10/2007, 12h17
  4. Réponses: 2
    Dernier message: 09/10/2006, 10h06
  5. Une erreur sur le free.. Oui mais pourquoi ?
    Par MonsieurAk dans le forum C
    Réponses: 7
    Dernier message: 22/12/2005, 20h51

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