Eigenes Slots in QT
-
was meinst du damit?
Ich nutze den Qt Creator.
Die anderen .h, und .cpp files in Projekten compiliert er auch.
-
Furtano schrieb:
was meinst du damit?
Ich nutze den Qt Creator.
Die anderen .h, und .cpp files in Projekten compiliert er auch.OK, dann sollte der moc auch aufgerufen werden. Dann weiß ich auch nicht weiter.
-
du musst das makro Q_OBJECT in der klasse im header von zweitfenster eintragen ansonsten generiert moc keinen zusätzlichen code für slots und co..
siehe auch http://doc.qt.nokia.com/4.7-snapshot/signalsandslots.html für mehr details
-
Ok, hab ich gemacht.
Jetzt bekomme ich immer noch Fehler:
zweitesfenster.obj:-1: Fehler:LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall zweitesFenster::metaObject(void)const " (?metaObject@zweitesFenster@@UBEPBUQMetaObject@@XZ)
zweitesfenster.obj:-1: Fehler:LNK2001: unresolved external symbol "public: virtual void * __thiscall zweitesFenster::qt_metacast(char const *)" (?qt_metacast@zweitesFenster@@UAEPAXPBD@Z)
zweitesfenster.obj:-1: Fehler:LNK2001: unresolved external symbol "public: virtual int __thiscall zweitesFenster::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@zweitesFenster@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
debug\eigeneSlots.exe:-1: Fehler:LNK1120: 3 unresolved externals
Und habe jetzt das Projekt noch mal erstellt, dann bekomme ich den Fehler:
moc_zweitesfenster.obj:-1: Fehler:LNK2019: unresolved external symbol "public: void __thiscall zweitesFenster::musikrichtungGeklickt(int)" (?musikrichtungGeklickt@zweitesFenster@@QAEXH@Z) referenced in function "private: static void __cdecl zweitesFenster::qt_static_metacall(class QObject *,enum QMetaObject::Call,int,void * *)" (?qt_static_metacall@zweitesFenster@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z)
-
Ganz ehrlich. Hör bitte auf mit diesen Fragen. Lies einfach was der Compiler/Linker dir sagt und beheb das. Das ist absolut straight forward.
-
Ich weiß an dieser Stelle wirklich nicht weiter.
Ich habe doch schon versucht das Projekt neu zu erstellen und jetzt bekomme ich diesen anderen Fehler.Mit:
unresolved external symbol "public: void __thiscall zweitesFenster::musikrichtungGeklickt(int)"kann ich nichts anfangen!
-
OK DANKE,
habe noch mal drübergeschaut und im Endeffekt wars nur noch das Projekt noch mal zu erstellen und ich habe die Implementierung des Slots auch noch vergessen einzufügen von alten Projekt. Jetzt gehts
-
Furtano schrieb:
Mit:
unresolved external symbol "public: void __thiscall zweitesFenster::musikrichtungGeklickt(int)"kann ich nichts anfangen!
Schön, dass es bei dir jetzt läuft. Kannst du jetzt auch den Zusammenhang erkennen? Unresolved external symbol bedeutet zu 99%, dass du eine Funktion deklariert, aber nicht definiert hast.
-
Ja nachdem du gesagt hast ich solls noch mal lesen, bin ich drauf gekommen
-
Mechanics schrieb:
Unresolved external symbol bedeutet zu 99%, dass du eine Funktion deklariert, aber nicht definiert hast.
Bei Qt ist es aber leider etwas komplizierter. Das Q_OBJECT-Macro fügt Deklarationen von virtuellen Funktionen ein, die dann später durch den moc implementiert werden. Ist der entsprechende Header aber nicht unter HEADERS im .pro aufgeführt, erzeugt qmake keinen moc-Aufruf, wodurch eben jene Implementierungen fehlen -> undefined reference.