Ich versuche ein Signal auszulösen, wenn in einem der ziehbaren Widgets auf der ein Doppelklick passiert Kühlschrankmagnete Beispiel . Hier sind die Änderungen, die ich an der Beispielquelle vorgenommen habe:
DragLabel:
%Vor% Das einzige, was ich in der Implementierungsdatei geändert habe, ist connect(this,SIGNAL(testSignal()),this,SLOT(testSlot()));
zu DragLabels Konstruktor hinzuzufügen.
Der Versuch, das Projekt zu kompilieren, führte dazu, dass ' undefinierter Verweis auf die Fehler' DragLabel :: testSignal () 'und' collect2: ld gab 1 Exit-Status zurück.
Wenn ich den Aufruf des Signals auskommentiere, kompiliert und läuft er, gibt aber ' Objekt :: connect: Kein solches Signal QLabel :: testSignal () in der dragelabel.cpp ' Warnung in die Anwendungsausgabe. Anscheinend wird testSignal () nicht als Signal erkannt.
Ich habe versucht, DragLabel den Q_OBJECT-Makro hinzuzufügen, aber es führt zu 4 ' undefinierten Verweis auf' vtable für DragLabel '' Warnungen und einem ' collect2: ld gab 1 Exit-Status zurück 'Fehler.
Was vermisse ich?
Setzen Sie das Makro Q_OBJECT an die Spitze, (muss das erste Ding in der Klasse sein und kein ";")
Stellen Sie sicher, dass Sie eine vollständige Neuerstellung durchführen, das VS-Add-In bemerkt insbesondere nicht immer, dass eine Datei ohne Neuaufbau erkannt wurde.
Weitere gute Ratschläge 20 Möglichkeiten, Qt-Signale und Slots zu debuggen
Es war das Makro am Ende. Ich musste meinen PC neu starten, damit es funktionierte, Reinigung und Wiederaufbau des Projekts funktionierten nicht. Vor dem Neustart gab Qt Creator weiterhin den Fehler 'ld returned 1 exit status' und die vtable-Warnungen aus. Sehr seltsam. - David McDavidson
Es ist nicht komisch, es ist dumm. Ich habe den gleichen Fehler, aber ich mache es nach dem Umordnen der .h-Dateien. Sprich:
1 classA.h enthält calssB.h;
2 classB.h deklarierte zwei Klassen, classB und classC (KlasseB.h deklarierte Signale und Slot)
Ich mache drei Dinge,
Trennen Sie classC von einer anderen .h-Datei
Beseitigen Sie alle Weiterleitungsklassendeklarationen zu Klasse B
classB.h wird von classA.cpp eingeschlossen, außer von classA.h
danach hat QT es kompiliert. Ich werde testen, ob es funktioniert.
Tags und Links qt signals-slots