Ich versuche ein Signal auszulösen, wenn in einem der ziehbaren Widgets auf dem fridge magnets example ein Doppelklick passiert. Hier sind die Änderungen, die ich auf das Beispiel Quelle gemacht:Qt - kein solcher Signalfehler
DragLabel:
class DragLabel : public QLabel
{
public:
DragLabel(const QString &text, QWidget *parent);
QString labelText() const;
public slots:
void testSlot(){qDebug()<<"testSlot";} //<-- implemented this slot
protected:
void mouseDoubleClickEvent(QMouseEvent *ev){emit testSignal();} //<-- overriden this method
private:
QString m_labelText;
signals:
void testSignal(); //<-- added this signal
};
Das einzige, was ich in der Implementierungsdatei geändert wird, das Hinzufügen connect(this,SIGNAL(testSignal()),this,SLOT(testSlot()));
zu DragLabel Konstruktor.
Der Versuch, das Projekt zu kompilieren führte zu 'undefined reference to `DragLabel :: Testsignal()' und 'collect2: ld returned 1 Exit-Status' Fehler.
Als ich den Anruf auf das Signal auf Kommentar, es kompiliert und ausgeführt, sondern verströmt ‚Object :: connect: Kein solches Signal QLabel :: Testsignal() in draglabel.cpp‘ in der Ausgabe Anwendung warnen. Anscheinend wird testSignal() nicht als Signal erkannt.
Ich habe versucht, das Q_OBJECT Makro DragLabel hinzuzufügen, aber es ergibt 4 'undefined reference to `VTable für DragLabel' 'Warnungen und einer' collect2: ld returned 1 exit status" Fehler.
Was fehlt mir?
In Ihrem Beispielcode fehlt der Makroaufruf Q_OBJECT, der die Ursache Ihrer Probleme sein könnte. –
Oh yeah Ich habe vergessen zu erwähnen, dass ich vorher Q_OBJECT hinzugefügt habe. Ich füge das zur Frage hinzu. –