QObject-Verbindung Funktion
Habe ich überprüft, andere ähnliche Fragen und versucht Ihre Lösungen, aber Sie arbeiten nicht für mich.
Ich bin im Grunde versucht, einen http-client, der macht nur post-Anfragen. Um dies zu tun, ich muss eine Verbindung QNetworkManager
's fertig-signal, um einige callback-slot.
Hier ist mein code.
h-Datei:
...
public slots:
void finishedSlot(QNetworkReply* reply);
private:
QNetworkAccessManager *network_manager;
...
cpp-Datei:
...
Class1::Class1(){
network_manager = new QNetworkAccessManager(this);
QObject::connect(network_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(finishedSlot(QNetworkReply *)));
}
...
void Class1::finishedSlot(QNetworkReply* reply)
{
//some logic with reply
}
...
Wie Sie sehen können, der slot ist definitiv vorhanden, und es wird erklärt unter public slots in der header-Datei. Also ich habe keine Ahnung, warum dies geschieht. Ich habe bereits versucht zu reinigen, ausführen von qmake und neu erstellen.
Ist die Fehlermeldung:
"QObject::connect: No such slot QObject::finishedSlot(QNetworkReply
*)"
Irgendeine Idee?
- Beachten Sie, dass der Fehler sagt QObject::finishedSlot. Das bedeutet, dass Qt nicht wissen, über Ihre Unterklasse. Das bedeutet, dass meta-Informationen über es war nicht generiert. Das bedeutet, dass
moc
war nicht auf Ihrer Klasse. Das bedeutet, dass Ihre Klasse fehlt dieQ_OBJECT
makro. - Sie dürfen nicht vergessen, geben Sie Ihre slot-Funktion (in der header-Datei) in den "slots" im
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie wahrscheinlich vergessen, das
Q_OBJECT
makro. Jede Klasse, die Ihre eigenen slots/Signale braucht, dass makro. Vergessen Sie nicht, dass Sie brauchen, um Ihre header - /source-Datei zu der .pro Datei.Eine Sache zu beachten; da bist du mit Qt 5 gibt es eine neue signal-slot Verbindung, die syntax, die Ihnen erlauben, geben Sie eine beliebige Funktion, und nicht nur diejenigen, die den vorgegebenen slots.
In dieser situation können Sie dies tun: -
Was ist das großartige an dieser syntax ist, dass Sie nur geben Sie die Adresse der Funktion und nicht die Mühe, über die Parameter, so dass, wenn Sie ändern Sie Sie in eine Funktion, die Sie nicht brauchen, um Sie zu aktualisieren, die in der connect-Anweisungen.
Sollten Sie dennoch mit dem Q_OBJECT makro, obwohl, und Sie können mehr Lesen über die neue syntax hier.
&Class1::finishedSlot
passieren wirthis
. Ich vergaß alle meine Qt-Erfahrungen :).Möchte ich von einem weiteren möglichen problem hier in diesem post ist die am weitesten oben in der google-Suche.
Zusätzlich hinzufügen
QObject
Sie müssen auch hinzufügenpublic slots:
oderpublic Q_SLOTS:
für Ihre maßgeschneiderte Veranstaltung. Sonst wirst du noch begegnen, dieQObject::connect: No such slot
Fehler.Gebe ich eine kurze Zusammenfassung hier nach Zeta ' s Beitrag und den anderen post
Lösen
“No such slot” error
muss man schauen..Schließlich, ein Beispiel hier:
Hoffe das erspart anderen das Leben