Seite 1 von 2

[gelöst] QT4 und MSVC2005 - Projekteigenschaften

Verfasst: 10. August 2006 13:02
von YP
Hallo zusammen!

Ich habe eine Frage bzgl. der Einstellungen der Projekteingenschaften unter MSVC2005.
Ich habe bisher über die VS-Kommandozeile mit nmake gearbeitet und das funktionierte natürlich einwandfrei.
Jetzt muss meine GUI jedoch in ein bestehendes C++-Projekt eingebunden werden und dafür brauche ich die Projekt-Einstellungen...

Ich habe mich dabei exakt an die Anweisungen dieses .pdf-Files gehalten und alle Umgebungsvariablen und Linkereinstellungen gesetzt.
Dennoch bekomme ich beim Build einen Fehler, dass er die inkludierte Datei 'QtGui' nicht finden kann.

Habe ich etwas übersehen?
Danke für jegliche Hilfe.

Gruss
YP

Verfasst: 10. August 2006 13:17
von Christian81
Dann suche einfach mal nach QtGui und füge das Include-Verzeichnis hinzu
und / oder QT += gui in der pro-Datei

Verfasst: 10. August 2006 13:45
von YP
QtGui liegt bei mir unter C.\Qt\include\QtGui.
Inkludiert habe ich das in den Projekteigenschaften über C\C++ -> General -> Additional Include Directories -> "$(QTDIR)\include";
QTDIR habe ich als Umgebungsvariable auf C:\Qt gesetzt.
Von daher müsste also der Pfad stimmen...aber scheinbar doch nicht...
QT += gui habe ich jetzt in der .pro hinzugefügt, jedoch kommt immernoch der Fehler:

Code: Alles auswählen

fatal error C1083: Cannot open include file: 'QtGui': No such file or directory
bzw.

Code: Alles auswählen

fatal error C1083: Cannot open include file: 'QApplication': No such file or directory

Verfasst: 10. August 2006 13:49
von Christian81
YP hat geschrieben:QtGui liegt bei mir unter C.\Qt\include\QtGui.
Inkludiert habe ich das in den Projekteigenschaften über C\C++ -> General -> Additional Include Directories -> "$(QTDIR)\include";
Und was soll das? Wenn QtGui in C:\Qt\include\QtGui\ liegt, warum fügst Du dann nicht C:\Qt\include\QtGui\ hinzu?

Verfasst: 10. August 2006 13:58
von YP
Vielleicht, weil ich neben QtGui auch noch QtXML und QtOpenGL nutzen möchte und nicht alles einzeln einbinden will? Oder geht es einfach nciht anders?
Nebenbei bemerkt habe ich das jetzt grade mal getan und

Code: Alles auswählen

C:\Qt\include;C:\Qt\include\QtGui;C:\Qt\include\QtOpenGL;C:\Qt\include\QtXML;C:\Qt\include\QtCore;
eingefügt.
Jetzt findet er zwar alles dafür bekomme ich 116 neue hübsche Fehler der Art

Code: Alles auswählen

error LNK2019: unresolved external symbol __imp__glEnable@4 referenced in function "protected: virtual void __thiscall CameraWidget::initializeGL(void)"

Verfasst: 10. August 2006 14:05
von Christian81
YP hat geschrieben:Vielleicht, weil ich neben QtGui auch noch QtXML und QtOpenGL nutzen möchte und nicht alles einzeln einbinden will? Oder geht es einfach nciht anders?
Ja, man muss schon alle verzeichnisse angeben. Oder eben #include <QtGui/QtGui> benutzen - finde ich aber unschön.
Jetzt findet er zwar alles dafür bekomme ich 116 neue hübsche Fehler der Art

Code: Alles auswählen

error LNK2019: unresolved external symbol __imp__glEnable@4 referenced in function "protected: virtual void __thiscall CameraWidget::initializeGL(void)"
Jetzt fehlen ein paar libs -> sieht wie opengl aus, also
QT += opengl bzw. opengl32.lib zu den libs hinzufügen.

Wenn Du es mit Qt += opengl machst, sollten auch die Include-Pfade automatisch mit eingebunden werden. Man muss das vcproj danach natürlich neu mit qmake erstellen.

Verfasst: 10. August 2006 14:22
von YP
Jetzt fehlen ein paar libs
Ja, fiel mir dann auch ein. Zu schnell gepostet... :)

Aber irgendwas fehlt immernoch.

Code: Alles auswählen

QtGuid4.lib QtCored4.lib QtOpenGLd4.lib QtXmld4.lib openGL32.lib 
hinzugefügt und die Fehleranzhal ist auf 40 gesunken.

Code: Alles auswählen

error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall CameraWidget::metaObject(void)const
error LNK2019: unresolved external symbol "public: static struct QMetaObject const LoginDialog::staticMetaObject"
Irgend ne Idee, was da noch fehlen könnte?
In der .pro habe ich schon die ganze Zeit über

Code: Alles auswählen

 QT += xml \ 
      opengl \
      gui 
drin, da das openGL ja sonst vorher auch nicht funktioniert hätte.

Danke auf jeden Fall schon mal bisher für die hilfreichen Tips! :)

Verfasst: 10. August 2006 14:26
von Christian81
Hast Du auch wirklich das .vcproj neu erstellt nachdem Du das pro-File modifiziert hast? Es sieht irgendwie so aus als würdest Du es nicht machen - die jetzt fehlenden Funktionen werden von moc erzeugt und normalerweise von qmake korrekt eingebunden (moc_filename.cpp) ...

Verfasst: 10. August 2006 14:59
von YP
Ok. habs nun hinbekommen, dass es ohne Fehler kompiliert.
Danke Dir!

Verfasst: 14. August 2006 13:44
von YP
*grml* Doch zu früh gefreut.
Jedes mal, wenn ich jetzt im Code was ändere und dann wieder Build ausführe, kommen die 40 Fehler zurück.
Ein einfaches qmake reicht da aber nicht. Erst wenn ich auch nmake ausführe, lässt sich im MSVC2005 ein Build ohne Fehler durchführen.
Aber das ist ja nicht der Sinn der Sache.
Kann es sein, dass das MSVC2005 die .moc falsch ausgibt?
Wenn ich es wie in dem .pdf-File aus meinem ersten Posting mache, also mit

Code: Alles auswählen

• Command Line:
$(QTDIR)\bin\moc.exe "$(InputPath)" -o "$(InputDir)moc_$(InputName).cpp"
• Description:
Performing moc on $(InputName).h
• Outputs:
$(InputDir)moc_$(InputName).cpp
in den Eigenschaften der .h-Files mit einem Q_OBJECT, komme ich auch nicht zu einem fehlerlosen Ergebnis.
Ersetze ich jedoch die von MSVC2005 erzeugten .moc-Files durch die durch qmake generierten Files, kompiliert er wieder fehlerlos.

Verfasst: 14. August 2006 14:04
von Christian81
welche Fehler?

nmake hat nicht viel mit der IDE zu tun
nmake benutzt Makefile (.Debug/.Release)
IDE degegen .vcproj
-> warum hast Du beides erzeugt?

Verfasst: 14. August 2006 14:08
von YP
Christian81 hat geschrieben:welche Fehler?
Die aus meinem vorangegangen Posting:

Code: Alles auswählen

error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall CameraWidget::metaObject(void)const
error LNK2019: unresolved external symbol "public: static struct QMetaObject const LoginDialog::staticMetaObject"
Äh...gut, wie erstelle ich denn dann das .vcproj neu, wenn nicht mit qmake?
Tut mir leid, wenn das ne wirklich dumme Frage ist, aber ich habe bisher noch nie damit gearbeitet...

Verfasst: 14. August 2006 14:13
von Christian81
siehe qmake docu
qmake -tp vc ...

Verfasst: 14. August 2006 14:45
von YP
Nope...passiert nichts.
Immernoch die gleichen Fehler.
Mir ist aber aufgefallen, dass MSVC2005 die .moc-Files nicht wie nmake mit in den Debug-Ordner schreibt.
Dementsprechend unterscheidet (siehe Klammer im Code) sich da MSVC2005 .moc-File auch von dem nmake .moc-File in folgender Zeile:

Code: Alles auswählen

#include "(../)QLoginDialog.h"
Alles andere ist identisch.

Moc Dateien

Verfasst: 14. August 2006 17:23
von Volker
Mal ne Frage, hast du die moc Dateien deinem Visual Studio Projekt hinzugefügt?