[gelöst] Eigene Public Slots funktionieren nicht!

Alles rund um die Programmierung mit Qt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

TheDON hat geschrieben: Ich habe jedoch gelesen, dass man in Verwendung von Q_OBJECT die "moc" Datei erstellen muss... ich wusste wie das funktioniert mit mingw als compiler... aber kann mir in diesem Fall jemand helfen mit vc2005?? Das wäre cool danke!!
Wie machst Du es mit MinGW? Doch hoffentlich nicht von Hand, oder? und qmake kann das genauso für msvc...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TheDON
Beiträge: 21
Registriert: 18. April 2006 22:25

Beitrag von TheDON »

Hallo Christian!

Ja, du hast recht ehehe.. am Anfang machte ich es manuell aber dann bemerkte ich, dass mingw das selbst tut... also von dem her hatte sich das mit mingw erledigt... aber msvc2005 macht das anscheinend nicht automatisch, denn ich würde ansonsten keine Fehlermeldungen erhalten.

Darum denke ich, man muss irgend einen Befehl "absetzen" um zu MOCKEN! :-)

Gruss
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

TheDON hat geschrieben:Hallo Christian!

Ja, du hast recht ehehe.. am Anfang machte ich es manuell aber dann bemerkte ich, dass mingw das selbst tut... also von dem her hatte sich das mit mingw erledigt... aber msvc2005 macht das anscheinend nicht automatisch, denn ich würde ansonsten keine Fehlermeldungen erhalten.

Darum denke ich, man muss irgend einen Befehl "absetzen" um zu MOCKEN! :-)
Nicht MinGW macht es allein sondern qmake. Und wenn dein von qmake erstelltest vcproj nicht funktioniert (aber eben mit mingw), dann liegt es an qmake.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

TheDON hat geschrieben:aber msvc2005 macht das anscheinend nicht automatisch
Hast Du die QtVSIntegration installiert? Dann wird das automatisch beim hinzufügen der Headerdatei eingetragen. Ansonsten: Datei auswählen, Eigenschaften/Benutzerdef Buildschritt/Allgemein und etwa sowas eintragen:

Befehlszeile: $(QTDIR)\bin\moc.exe "$(InputName).h" -o ".\GeneratedFiles\moc_$(InputName).cpp"
Beschreibung: Moc'ing $(InputName).h...
Ausgaben: ".\GeneratedFiles\moc_$(InputName).cpp"
Zusätzliche Abhängigkeiten: $(QTDIR)\bin\moc.exe;inc\$(InputName).h

Danach zum testen die Datei einmal einzeln kompilieren.
Shadow
Beiträge: 92
Registriert: 27. August 2005 18:15
Wohnort: Iserlohn
Kontaktdaten:

Beitrag von Shadow »

TheDON hat geschrieben:Hallo Jungs!

Besten Dank!

Ja, hatte ich bereits probiert aber wenn ich das Q_OBJECT Macro einfüge dann habe ich nur Linkerfehlermeldungen

Ich habe jedoch gelesen, dass man in Verwendung von Q_OBJECT die "moc" Datei erstellen muss... ich wusste wie das funktioniert mit mingw als compiler... aber kann mir in diesem Fall jemand helfen mit vc2005?? Das wäre cool danke!!
...einfach eine Kurze step-by-step guide!

Danke jungs!!! ;-)

Gruss,
TheDON
Der MOC-Schritt muss hierbei hinzugefügt werden. Wie du ein konformes Projekt für VC 2005 erstellt, findest du hier.
TheDON
Beiträge: 21
Registriert: 18. April 2006 22:25

Beitrag von TheDON »

Hallo Jungs!

Also.. ein Schrittchen weiter... ;-)
Danke euch allen!

Die moc_datei wird also automatisch erstellt beim definieren des Q_OBJECT macros...

ABER

schaut mal was dann beim Kompilieren kommt:

Code: Alles auswählen

------ Build started: Project: DonaDict, Configuration: Debug Win32 ------
Compiling...
gui.cpp
Linking...
moc_gui.obj : error LNK2019: unresolved external symbol "public: void __thiscall GUI::onSuchenClicked(void)" (?onSuchenClicked@GUI@@QAEXXZ) referenced in function "public: virtual int __thiscall GUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
moc_gui.obj : error LNK2019: unresolved external symbol "public: void __thiscall GUI::onGesamtesDiktionaerAnzeigenClicked(void)" (?onGesamtesDiktionaerAnzeigenClicked@GUI@@QAEXXZ) referenced in function "public: virtual int __thiscall GUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
moc_gui.obj : error LNK2019: unresolved external symbol "public: void __thiscall GUI::onAenderungenSpeichernClicked(void)" (?onAenderungenSpeichernClicked@GUI@@QAEXXZ) referenced in function "public: virtual int __thiscall GUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
moc_gui.obj : error LNK2019: unresolved external symbol "public: void __thiscall GUI::onEintragEntfernenClicked(void)" (?onEintragEntfernenClicked@GUI@@QAEXXZ) referenced in function "public: virtual int __thiscall GUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
moc_gui.obj : error LNK2019: unresolved external symbol "public: void __thiscall GUI::onAboutSelected(void)" (?onAboutSelected@GUI@@QAEXXZ) referenced in function "public: virtual int __thiscall GUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
moc_gui.obj : error LNK2019: unresolved external symbol "public: void __thiscall GUI::onHilfethemenSelected(void)" (?onHilfethemenSelected@GUI@@QAEXXZ) referenced in function "public: virtual int __thiscall GUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
moc_gui.obj : error LNK2019: unresolved external symbol "public: void __thiscall GUI::onBestehendesDiktionaerLoeschenSelected(void)" (?onBestehendesDiktionaerLoeschenSelected@GUI@@QAEXXZ) referenced in function "public: virtual int __thiscall GUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
moc_gui.obj : error LNK2019: unresolved external symbol "public: void __thiscall GUI::onNeuesDiktionaerErstellenSelected(void)" (?onNeuesDiktionaerErstellenSelected@GUI@@QAEXXZ) referenced in function "public: virtual int __thiscall GUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
debug\DonaDict.exe : fatal error LNK1120: 8 unresolved externals
Build log was saved at "file://c:\Dokumente und Einstellungen\Donato\Desktop\DonaDict\debug\BuildLog.htm"
DonaDict - 9 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Ich vermute wieder irgend eine Umgebungsvariable die eingetragen werden muss...

Habt ihr ne Ahnung??

Danke!!! :)

Gruss,
TheDON
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Erstellen ist ja schonmal gut. Aber vom angucken werden sie nicht kompiliert und geklinkt... :roll:
Und Du hast immer noch nicht gesagt ob du nun die VS-Integration oder qmake nimmst (wobei qmake es eigentlich immer richtig macht...)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TheDON
Beiträge: 21
Registriert: 18. April 2006 22:25

Beitrag von TheDON »

Entschuldige die dumme Frage aber was ist die VS-Integration??
Ich dachte durch Folgen der HowTo wie man Qt mit VS2005 verbastelt hat man bereits alles gemacht... :roll:

macman hat oben bereits etwas von der QtVSIntegration erwähnt.. aber verstehe im Moment nicht ganz wie ich diese Optionen hinzufügen kann..

Die Eigenschaften der Datei innerhalb von vc2005??

Danke nochmals für eure Geduld!

Gruss
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

TheDON hat geschrieben:Entschuldige die dumme Frage aber was ist die VS-Integration??
Damit wär die Frage, ob Du es installiert hast, beantwortet. VS-Integration ist verfügbar, wenn man eine Kommerzlizenz hat. Ist ein Plugin für VS und nimmt einem ne Menge Handarbeit ab. Zusätzlich ist der Designer eingebunden, sowie die Qt-Doku in der Hilfe.
TheDON hat geschrieben:Die Eigenschaften der Datei innerhalb von vc2005??
Wo sonst? Ob das bei Visual Studio Express aber auch so ist, weiß ich nicht.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

So und jetzt nochmal meine Frage - erstellst du das vcproj mit qmake? Wenn ja und es gibt immer noch den Linkerfehler, dann ist es ein Fehler in qmake.
Wenn du es von Hand erstellst (warum auch immer), solltest du mal Signals und Slots zu Gemüte führen und auch die Doku zu moc lesen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TheDON
Beiträge: 21
Registriert: 18. April 2006 22:25

Beitrag von TheDON »

Christian81 hat geschrieben:So und jetzt nochmal meine Frage - erstellst du das vcproj mit qmake? Wenn ja und es gibt immer noch den Linkerfehler, dann ist es ein Fehler in qmake.
Wenn du es von Hand erstellst (warum auch immer), solltest du mal Signals und Slots zu Gemüte führen und auch die Doku zu moc lesen...
Hallo Christian!

Also... ja ich erstelle es mit qmake! aber so ist es auch bei der Howto beschrieben!

ich mache zuerst einen qmake -project (alle cpp und h dateien bestehen bereits)
danach mache ich einen qmake -tp vc <projektname>

fertig!

hier schaue Mal was ich sonst noch gefunden in der moc datei die erstellt wird:

Code: Alles auswählen

/****************************************************************************
** Meta object code from reading C++ file 'gui.h'
**
** Created: Do 20. Apr 12:45:42 2006
**      by: The Qt Meta Object Compiler version 59 (Qt 4.1.1)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/

#include "../gui.h"
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'gui.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 59
#error "This file was generated using the moc from 4.1.1. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
was stimmt denn nicht?? habe sogar den Custom Build Step diesem Projekt hinzugefügt, wie von macman beschrieben aber nichts tut sich... :-(

bin jetzt echt langsam am verzweifeln.

Ps. wie sollte ich das projekt denn automatisiert erstellen??
wenn ich es nicht mit qmake mache, sondern direkt mit vc2005, dann habe ich noch mehr linker fehler...

gruss
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

TheDON hat geschrieben: ich mache zuerst einen qmake -project (alle cpp und h dateien bestehen bereits)
danach mache ich einen qmake -tp vc <projektname>
Das ist auch korrekt so (nur hast du es noch nie erwähnt). Wenn du dann das Projekt (neu) kompilierst, sollte auch alles gehen. Ich glaube nicht dass qmake einen Fehler macht. Zum Test kannst Du mit qmake mal ein vcproj für den linguist erstellen lassen - wenn das geht (dort werden auch mocs verwendet) liegt der Fehler bei Dir, ansonsten bei qmake.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TheDON
Beiträge: 21
Registriert: 18. April 2006 22:25

Beitrag von TheDON »

Okey... habe ich auch probiert!

Aber ebenso beim versuchen der linguist zu kompilieren kommt folgende Fehlermeldung:

Code: Alles auswählen

------ Build started: Project: linguist, Configuration: Debug Win32 ------
RCC linguist\linguist.qrc
C:\Programme\QT\bin\rcc.exe: File does not exist 'linguist\linguist.qrc'
Project : error PRJ0019: A tool returned an error code from "RCC linguist\linguist.qrc"
Build log was saved at "file://c:\Programme\QT\tools\linguist\linguist\tmp\obj\debug_shared\BuildLog.htm"
linguist - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Wahrscheinlich muss man aber sonst was konfigurieren um den linguist zu kompilieren... (???)

hast du sonst noch eine idee?? Ich meine... wie finde ich am Besten heraus wieso das mit dem moc-file nicht tut??

Ich habe mir auch bereits überlegt mingw zu installieren um zu schauen ob es mit mingw32-make dann tut....

denkst du es macht sinn??

Gruss
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Deine Instalation ist Schrott - linguist.qrc ist in qt-4\tools\linguist\linguist ...
was ich nicht verstehe ist, warum er linguist\linguist.qrc sucht.
Und mingw - sagtest du icht eingangs dass es mit MinGW geht???
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TheDON
Beiträge: 21
Registriert: 18. April 2006 22:25

Beitrag von TheDON »

Christian81 hat geschrieben:Deine Instalation ist Schrott - linguist.qrc ist in qt-4\tools\linguist\linguist ...
was ich nicht verstehe ist, warum er linguist\linguist.qrc sucht.
Und mingw - sagtest du icht eingangs dass es mit MinGW geht???
ja... als ich qt 3.3 hatte! jetzt habe ich aber mein Laptop neu aufgesetzt und auf qt 4.1.1 umgestiegen OHNE mingw als compiler...

aber weisst du.. zum Testen ob es ein allgemeines Problem ist dachte ich, ich installiere mingw und probiere es aus...

Also eben.. eine andere Idee hast du nicht??

Vielen Dank für Deine Zeit!
Sehr nett von dir! ;-)
Antworten