Qt - kein solcher Signalfehler

8

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?

    
David McDavidson 09.04.2010, 19:08
quelle

2 Antworten

12

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

    
Martin Beckett 09.04.2010, 19:32
quelle
0
  

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,

  1. Trennen Sie classC von einer anderen .h-Datei

  2. Beseitigen Sie alle Weiterleitungsklassendeklarationen zu Klasse B

  3. classB.h wird von classA.cpp eingeschlossen, außer von classA.h

danach hat QT es kompiliert. Ich werde testen, ob es funktioniert.

    
Odys 23.12.2011 20:01
quelle

Tags und Links