Keine passende Funktion für QObject::connect
Ich Schreibe ein Programm, das senden einer UDP-frame alle 10 mS. Hier ist, wie mein Programm funktionieren soll :
Habe ich eine 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();
}
Meine header-Datei von 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
Dann nutze ich diese in meinem main
:
int main(int argc, char *argv[])
{
clientSupervision c;
c.sendDataUDPTimer(10);
QCoreApplication a(argc, argv);
return a.exec();
}
Habe ich den Fehler :
keine passende Funktion für Aufruf von " QObject::connect(QTimer*& const char*, clientSupervision* const, const char*)
Ich verstehe nicht, warum die Funktion connect nicht finden können, eine passende Funktion.
Was sollte ich ändern?
Ihre Klasse sollte von der Klasse QObject Erben. Ansonsten Qt signal/slot-Mechanismus funktioniert nicht.
Vielen Dank für deine Hilfe, ich werde se Sie bald, ich habe noch eine Frage zu diesem code ^^
sicher, np. Mach dir keine sorgen über die downvotes haben wir bekommen. Sie sind alle unerklärt, daher nichts zu befürchten. 🙂
Vielen Dank für deine Hilfe, ich werde se Sie bald, ich habe noch eine Frage zu diesem code ^^
sicher, np. Mach dir keine sorgen über die downvotes haben wir bekommen. Sie sind alle unerklärt, daher nichts zu befürchten. 🙂
InformationsquelleAutor Evans Belloeil | 2014-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann es mehrere Gründe für das Problem im Allgemeinen:
Du nicht QObject Erben.
Sie nicht die Q_OBJECT-makro in Ihrer Klasse.
Nicht definiert die Methode als Steckplatz in Ihrem header-Datei, in dem die Klasse deklariert ist.
Ihr Problem ist die erste, die hier gesehen werden kann:
Sollten Sie den code ändern zu:
Natürlich die Konstruktor-Implementierung und-Signatur ändern muss, auch wie folgt:
Darüber hinaus scheinen Sie zu lecken, Ihre QTimer Beispiel, wie es nicht die Eltern, die als parameter an den Konstruktor.
Darüber hinaus die
QObject::
Umfang ist unnötig in Ihrem code, wie Ihre Klasse sollten ErbenQObject
direkt oder indirekt so oder so.Sogar noch mehr, ich würde empfehlen Sie zu nutzen die neue signal-slot-syntax.
Sie brauchen, um richtig zu generieren, moc, aber das ist eine andere Frage. Wenn Sie mit qmake das sollte funktionieren, ansonsten include "foo.moc" am Ende der Quell-Datei von dir. Sie müssen möglicherweise auch um eine ~clientSupervision() Destruktor.
InformationsquelleAutor lpapp
Andere mögliche Ursache dieses Fehlers ist, zu versuchen, eine Verbindung zu einem Steckplatz, der überlastet ist. Zum Beispiel, dies auch dazu führen, die gleichen Fehler
Aber nicht, wenn man explizit casten:
InformationsquelleAutor Peter Mitrano
Hier ist eine weitere, schlich sich bei mir: die Klasse, Die der slot-Objekt wurde forward-deklariert in der header, aber nicht definiert, in der Umsetzung einschließlich der header.
InformationsquelleAutor 2NinerRomeo