Aucune fonction correspondante pour QObject::connect
Je suis en train d'écrire un programme qui envoie une UDP image toutes les 10 mS,. Voici comment mon programme est censé fonctionner :
J'ai un client class
:
//Constructor
clientSupervision::clientSupervision()
{
}
void clientSupervision::sendDataUDP(){
//Create a frame and send it
...
}
void clientSupervision::sendDataUDPTimer(int timer){
QTimer *tempsEnvoieTrameSupervision = new QTimer();//Create a timer
tempsEnvoieTrameSupervision->setInterval(timer);//Set the interval
//Mise en place des connections
QObject::connect (tempsEnvoieTrameSupervision,SIGNAL (timeout()),this, SLOT (envoiTrameSupervision())); //Connect the timer to the function
tempsEnvoieTrameSupervision->start();//Start the timer
}
//Call sendDataUDP
void clientSupervision::envoiTrameSupervision(){
std::cout << "Envoi de la trame de supervision";
sendDataUDP();
}
Mon fichier d'en-tête de clienSupervision.h
:
#ifndef CLIENTSUPERVISION_H
#define CLIENTSUPERVISION_H
#include <winsock2.h> //pour les fonctions socket
#include <cstdio> //Pour les Sprintf
#include "StructureSupervision.h"
#include "utilitaireudp.h"
#include <QTimer>
#include <QObject>
#include <iostream>
class clientSupervision
{
Q_OBJECT
public:
clientSupervision();
void sendDataUDP();
void sendDataUDPTimer(int timer);
public slots:
void envoiTrameSupervision();
};
#endif //CLIENTSUPERVISION_H
Puis-je utiliser dans mon main
:
int main(int argc, char *argv[])
{
clientSupervision c;
c.sendDataUDPTimer(10);
QCoreApplication a(argc, argv);
return a.exec();
}
J'ai l'erreur :
no matching function for call to 'QObject::connect(QTimer*&, const char*, clientSupervision* const, const char*)
Je ne comprends pas pourquoi la fonction de connexion ne pouvez pas trouver une fonction de correspondance.
Ce que je devrais changer?
Votre classe doit hériter de QObject. Sinon Qt signal/slot mécanisme ne fonctionnera pas.
Merci pour votre aide, je vais à bientôt, j'ai une autre question sur ce code ^^
bien sûr, np. Ne vous inquiétez pas les downvotes que nous avons obtenu. Ils sont tous inexpliquée, donc rien à craindre. 🙂
Merci pour votre aide, je vais à bientôt, j'ai une autre question sur ce code ^^
bien sûr, np. Ne vous inquiétez pas les downvotes que nous avons obtenu. Ils sont tous inexpliquée, donc rien à craindre. 🙂
OriginalL'auteur Evans Belloeil | 2014-06-25
Vous devez vous connecter pour publier un commentaire.
Il peut y avoir plusieurs raisons pour expliquer le problème en général:
Vous n'avez pas hériter de QObject.
Vous n'avez pas la macro q_object dans votre classe.
Vous ne définissez pas de la méthode comme emplacement de votre fichier d'en-tête où la classe est déclarée.
Votre problème est la première qui peut être vu ici:
Vous devez modifier votre code pour:
Bien sûr, le constructeur de la mise en œuvre et la signature aurait besoin de changer, aussi, comme suit:
En outre, vous semblez fuite de votre QTimer exemple qu'il n'a pas de parent en tant que paramètre au constructeur.
En outre, la
QObject::
champ d'application est inutile dans votre code comme votre classe doit hériter deQObject
, directement ou indirectement, de toute façon.Encore plus, je vous encourage fortement à utiliser le nouveau signal-slot syntaxe.
vous avez besoin de bien générer le moc, mais c'est une autre question. Si vous utiliser qmake cela devrait fonctionner, sinon include "foo.moc" à la fin du fichier source de la vôtre. Vous pourriez aussi avoir besoin d'obtenir un ~clientSupervision() destructeur.
OriginalL'auteur lpapp
Une autre cause possible de cette erreur est d'essayer de se connecter à un emplacement qui est surchargé. Par exemple, ce bien la cause de la même erreur
Mais pas si vous avez explicitement exprimés:
OriginalL'auteur Peter Mitrano
En voici un autre qui s'est faufilé sur moi: La catégorie de l'emplacement de l'objet a été de l'avant déclarées dans l'en-tête, mais non défini dans la mise en œuvre, y compris son en-tête.
OriginalL'auteur 2NinerRomeo