Qt 4.4.3 und Visual Studio 2008 - Conf Problem?

Verschiedenes zu Qt
MQ
Beiträge: 24
Registriert: 22. Oktober 2008 08:45

Qt 4.4.3 und Visual Studio 2008 - Conf Problem?

Beitrag von MQ »

Hallo,

Ich habe mir die Tage Qt4.4.3 gezogen und für Visual Studio 2008 kompiliert.

configure und nmake sind ohne ersichtlichen Fehler durchgelaufen.

Wenn ich nun ein kleines Tutorial versuche, kommt die Meldung z.B. bei

Code: Alles auswählen

#include <QApplication>
dass er QApplication nicht finden kann. Ich muss gezielt mit

Code: Alles auswählen

#include <qtgui/QApplication>
einen relativen Pfad angeben. VS sucht damit nicht rekursiv in den Unterverzeichnissen des Includeverzeichnisses.

Frage: Ist das so normal? In all den Tipps und Tricks im Netz bzgl der Visual Studio Anbindung von QT steht nie was bzgl der Änderung der include-Anweisungen.

Habe ich den Code entsprechend geändert, meckert der Linker. Es werden somit keine Qt-Libs gelinkt. In all den Tipps steht auch nichts, dass man spezielle Libs in ein Project einbinden muss. Ich denke aber, das muss ich doch tun!?

Sowohl QTDIR\include als auch QTDIR\lib habe ich unter Tools-Options-Project and Solutions-VC++ Directories-Include Files bzw. Library Files eingetragen.

Sorry für diese Fragen doch ich bin kein Profi, brauche VS2008 nur sporadisch und starte eben meine ersten echten Versuche mit Qt/VS9. Die wirklich ersten Versuche habe ich unter Linux gemacht und da gab es die beschriebenen Probleme nicht.

Gruß

MQ
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Hi,
also bei mir macht er wenn ich ein neues Projekt mache immer den folgenden Eintrag in die Projekteigenschaften->zus. Includeverzeichnisse.
$(QTDIR)\include\QtGui
das sollte dein Problem beseitigen, da sich die Datei auch in diesem Ordner befindet ;-)
Sprich in $(QTDir)\include gibts keine QtGui... Aber einen Ordner der die Datei QtGui enthält
MQ
Beiträge: 24
Registriert: 22. Oktober 2008 08:45

Beitrag von MQ »

AuE hat geschrieben:Hi,
also bei mir macht er wenn ich ein neues Projekt mache immer den folgenden Eintrag in die Projekteigenschaften->zus. Includeverzeichnisse.
Wie hast du das hingekriegt? Ich habe nicht unter Projekteigenschaften sondern unter Tools-Options-Project and Solutions-VC++ Directories-Include Files den Pfad eingetragen. Der wird auch angenommen, denn er findet die Include-Dateien ja, wenn man dan entsprechenden Unterordner angibt.

Gibt es eine Schalter in VS, der sagt, such auch in den Unterverzeichnissen?
$(QTDIR)\include\QtGui
das sollte dein Problem beseitigen, da sich die Datei auch in diesem Ordner befindet ;-)
Sprich in $(QTDir)\include gibts keine QtGui... Aber einen Ordner der die Datei QtGui enthält
Iss klar! Ich möchte nur Code schreiben, der sowohl unter Linux als auch Windows lauffähig ist und wenn es darauf hinauslaufen muss, schon bei den includes Unterschiede zu machen, dann wirds haarig und aufwendig. Ich möchte das vermeiden. Auch möchte ich nicht für jedes Include suchen müssen, in welchem Unterverzeichnis dasjenige liegt. Unter Linux (gcc) tut's ja auch.

MQ
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Also von diesen Schalter weiß ich nix.

Du könntest dir im einfachsten Fall eine .bat schreiben, die dir dein VS startet und dir nebenbei auch ein paar Umgebungsvariablen setzt...
so hab ichs mir gemacht bzw übernommen und erweitert.

Aber da du ja schon im VS die zusätzlichen Includepfade angegeben hast kannst du ja doch einfach ein paar neue hinzufügen. Füge "QTDIR"\Include\QtGui und \QtCore mit hinzu und du musst keinen doppelten Code tippen.

Oder was evtl noch besser wäre-mach das ganze in die Projekteigenschaften!


Eine andere Idee:

Setzt dir ne Umgebungsvar ala set qtdir=c:\Qt\4.4.3\Include
und dann machst nur noch in die Projekteigenschaften->Allgemein->zus., Includes

$(qtdir)\QtGui
$(qtdir)\QtCore

wenn er die Variable nicht findet(nicht gesetzt) meckert dir dasdas VS auch mit an. (warnstufe 3)
MQ
Beiträge: 24
Registriert: 22. Oktober 2008 08:45

Beitrag von MQ »

... hmm ...

habe gerade bemerkt, dass unter Linux qt3 installiert ist und da liegen alle .h Dateien direkt unter include und nicht in verschiedenen Unterverzeichnissen.

Bleibt die Frage, ob man es hinkriegt, dass automatisch die Qt-Libs gelinkt werden oder ob man jede einzelne per Hand anfügen muss.

MQ
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Im VS kannst doch die Lib Verzeichnisse genau wie die Include Verzeichnisse auch setzen...

Also einfach in den Projekteinstellungen->Linker

$(QtDir)\lib angeben, thats it.
MQ
Beiträge: 24
Registriert: 22. Oktober 2008 08:45

Beitrag von MQ »

AuE hat geschrieben:Im VS kannst doch die Lib Verzeichnisse genau wie die Include Verzeichnisse auch setzen...

Also einfach in den Projekteinstellungen->Linker

$(QtDir)\lib angeben, thats it.
echt?

Ich habe das lib-Verzeichnis eingebunden, die libs werden auch gefunden. Ich muss nur "per Hand" die Qt-Libs angeben, die angelinkt werden sollen. Da macht bei mir VS nix automatisch.

Also, die Verzeichnisse sind VS bekannt. Unter Project-Properties-Linker-Input-Additional Dependencies die QtCore4.lib und die QtGui4.lib bzw. deren Debug-Versionen eintragen. Dann geht's.
Wenn ich jetzt weitere libs benötige, dann werde ich die da auch per Hand eintragen müssen. Bei mir wird nichts automatisch aufgelöst.

Meine Frage ist, ob das so normal ist. Wenn ich deine Ausführungen so lese, dann verstehe ich das so, dass da nichts per Hand einzutragen ist. Was macht's du anders?

MQ
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Also.....

unter Allgemein(beim Linker) ist bei zus. Bibliotheksverzeichnisse QTDIR\Include eingetrage.

unter Eingabe müssen dann natürlich die Namen reingesetzt werden.

Das das bei mir automatisch geht würde ich auf die kostenpflichtige Version bzw die VS2005Integration schieben. Hast du die auch?(also für 08)

Beim Projekt erstellen kann ich da ja sagen welcheQt sachen ich nutzen mag. Denke mal dann wird er die mir da mit reinballern. Aber ich kann mir nicht vorstellen das es einen Kompiler gibt der automatisch weiß was er mitzulinken hat. So wie ikch das kenne muss man diese Dinge immer mit angeben!

Ich hatte mal so eine Beschreibung wie man das auch mit der OS machen kann.. muss mal schauen.
MQ
Beiträge: 24
Registriert: 22. Oktober 2008 08:45

Beitrag von MQ »

AuE hat geschrieben:Also.....

unter Allgemein(beim Linker) ist bei zus. Bibliotheksverzeichnisse QTDIR\Include eingetrage.

unter Eingabe müssen dann natürlich die Namen reingesetzt werden.

Das das bei mir automatisch geht würde ich auf die kostenpflichtige Version bzw die VS2005Integration schieben. Hast du die auch?(also für 08)
Ich nutze die fürummeversion. Da ich keine kommerziellen Anwendungen bauen will und auch sonst nur wenig zum Programmieren komme, rentiert sich die kostenpflichtige Version für mich nicht.

Es wäre nachvollziehbar, wenn die Kaufversion von Qt da tiefer in VS einsteigt, als die Ppensource, keine Frage!

Beim Projekt erstellen kann ich da ja sagen welcheQt sachen ich nutzen mag. Denke mal dann wird er die mir da mit reinballern.
Da kann ich auch nix auswählen. Qt erscheint da nicht!
Aber ich kann mir nicht vorstellen das es einen Kompiler gibt der automatisch weiß was er mitzulinken hat. So wie ikch das kenne muss man diese Dinge immer mit angeben!
Natürlich weiss der Linker automatisch nicht, was er linken soll. Bei MS-Sachen gibt es aber wohl Datenbanken oder was auch immer, wo vermerkt ist, welche Libs die nicht Standard sind, bei Bedarf zu linken sind. Das macht die Sache komfortabel. Wenn ich an vor 20 Jahren denke, da musste man alles per Hand angeben und das war mühsam. heute macht das alles die IDE.

Dass das bei Qt Opensource nicht geht ist auch verständlich. Ich hab mich nur gewundert, dass bei den Tipps im Netz (zumindest die ich mir angekuckt habe) nie davon die Rede war. Die Autoren haben wohl alle die Kaufversion von Qt. Obwohl diese Tipps sich an Anwender wenden, die eben nicht die Kaufversion haben, wird nur erwähnt, die Lib und Include-Verzeichnisse einzutragen. Dass die Libs, die beim Projekt konkret mit eingebunden werden sollen irgendwo auch per Hand eingetragen werden müssen, habe ich dort nicht gelesen.


Also mein Weltbild ist in Ordnung.

Die Include-Dateien werden unter Linux (Qt3) automatisch gefunden, da die .h Dateien im include-Verzeichnis nicht in Unterordnern liegen.

Das Einbinden der Libs geht nicht automatisch, sondern muss per Hand in die Projektoptionen eingetragen werden. Man kann lediglich den Pfad setzen, in dem die Libs liegen. Welche konkret anzfassen sind, muss der Programmierer wissen.


Ich würde daher empfehlen, die Tutorials in den Docs zu ändern und da dann konkret #include <qtgui/QApplication> einzutragen. Da hat es wohl einen Wechsel in der Konzeption gegeben.

Abschließend gibt es die Frage, ob es irgendwo eine Möglichkeit gibt, wo man nachschauen kann, welche Libs man denn für konkrete Klassen benötigt. Leider spukt der Linker ja nur aus, dass er keine referenz finden konnte aber nicht, welche er finden sollte. Das müsste in den Docs zu finden sein, oder?

MQ
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Auch MS sachen muss man "von Hand" hinzufügen...siehe psapi o.ä.

also mal ganz von unten raus gesagt: die QtCore brauchst so ziemlich immer und wenns was mit Gui zu tun hat die dann auch. Die anderen je nach dem was kommt.

Habe hier was für Integration ins VS2005 gefunden... evtl hilft dir das ja....
Compiling Qt 4.3.2 for Visual Studio 2005 + Setting up Visual Studio 2005 Integration
=====================================================================================

1.) Unzip "qt-win-opensource-src-4.3.2.zip" to a directory (e.g.: F:\MyProgies\Qt4).

This folder is from now on called QTDIR. Make sure that your partition has at
least 2 GB free space that is needed to compile the Q-Toolkit on your computer.

2.) Start the "Visual Studio 2005 Command Promt" using the Start Menu of Windows.
The command prompt is located within the "Visual Studio Tools".

3.) Goto the QTDIR using the "cd" command, e.g.:

F:
cd F:\MyProgies\Qt4

4.) Type the following line and press enter:

configure -buildkey msvc2005 -qt-gif -qt-sql-odbc -qt-sql-sqlite -no-qt3support

If you need backward compatibility and want to compile Qt 3.X applications you
should remove the last command line argument ("-no-qt3support"). If not you should
add it to fasten the compile process.

5.) Type the following line and press enter to start the compilation:

nmake

NOTE: this can take up to an hour depending on your processor and hard disk.

6.) You should clean up the installation of Qt which should take up about 2 GB on
you hard disk by entering the following command (NOTE: !!! create a backup of
your QTDIR\lib directory first, because some Qt versions also clean that
directory. Copy the files back after the command has finished !!!):

nmake clean

Now the QTDIR folder should only be about 0.5 GB in size.

7.) Press <Windows>+<Pause> to bring up the "System Settings" of Windows. Now choose
the "Advanced" tab and click the "Environment Variables" button.

@ user variables list:

* Edit the INCLUDE variable and append the QTDIR\include folder to it.
(e.g. by appending "; F:\MyProgies\Qt4\include" without double quotes)

* Edit the LIB variable and append the QTDIR\lib folder to it.
(e.g. by appending "; F:\MyProgies\Qt4\lib" without double quotes)

+ Create a new variable called QMAKESPEC and add "win32-msvc2005" as content.
(e.g. QMAKESPEC should contain "win32-msvc2005" without double quotes)

@ system variables list:

* Edit the PATH variable and append the QTDIR\bin folder to it.
(e.g. by appending "; F:\MyProgies\Qt4\bin" without double quotes)

+ Create a new variable called QTDIR and add the QTDIR as content.
(e.g. QTDIR should contain "F:\MyProgies\Qt4" without double quotes)

Close the dialog by clicking OK. Close the "System Settings" by clicking OK again.

8.) Install the Qt Visual Studio Integration 1.2.2.

9.) Start Visual Studio 2005 and goto "Extras->Options...". Open the "Qt" tree item and
select the node called "Builds". Click on "Add" and enter the following data:

Name: Qt-4.3.2
Path: Your QTDIR (e.g.: F:\MyProgies\Qt4)

10.) ENJOY building Qt applications under Windows.
MQ
Beiträge: 24
Registriert: 22. Oktober 2008 08:45

Beitrag von MQ »

also der knackpunkt dürfte Pkt 8 sein. Da wird, vermute ich, alles getan, um Qt in VS zu integrieren. Das Tool fehlt bei der Opensource-Variante.

MQ
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

stimmt ;-) hatte ich mir nicht so durchgelesen.

aber naja- bei der 30day trial zB is sie ja dabei ;-)

und auch sonst denke ich das es da wege gibt :-D
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn man keine Qt-Integration hat (also z.B. wegen der OpenSource-Variante) dann erstellt man einfach eine .pro-Datei und lässt qmake das .vcproj Erstellen. Wo ist da das Problem?

Warum taucht dieses 'Problem' alle paar Wochen auf - ist es so schwer einfach mal die Doku zu qmake wenigstens zu überfliegen??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

setzt das auch die include/Lib Verzeichnisse für´s Projekt?
close1
Beiträge: 39
Registriert: 9. April 2008 14:28
Kontaktdaten:

Beitrag von close1 »

Christian81 hat geschrieben:Wenn man keine Qt-Integration hat (also z.B. wegen der OpenSource-Variante) dann erstellt man einfach eine .pro-Datei und lässt qmake das .vcproj Erstellen. Wo ist da das Problem?

Warum taucht dieses 'Problem' alle paar Wochen auf - ist es so schwer einfach mal die Doku zu qmake wenigstens zu überfliegen??
Die Antwort auf diese wohl berechtigte Frage ist: Weil die meisten Personen nicht außerhalb ihrer IDE arbeiten wollen :roll: alles muss von Visual Studio aus funktionieren, das sind die Windows user halt gewöhnt...

Für diejenigen die Christians Lösung nicht befolgen wollen: erstellt euch ein Projekt includiert alles, fügt die abhängigkeiten ein und benutzt das als Vorlage, aber ihr werdet später Probleme haben wenn ihr UI Dateien benutze wollt.

Von daher ist die Methode die Christian vorschlägt die effizienteste, und auch einfachste, glaubt mir ich habs wirklich versucht es via VS allein zu machen(benutzerdefinierte Buildschritte usw. alles umständlich) :(

Wer dennoch nicht diesen Ratschlägen folgen will -> kauft euch qt mit VS Intergration :lol:

edit: ja es setzt auch die include Verzeichnisse und die Libs, es ist dann auch möglich einfach mit QMake die Signals&Slots bzw. UI Dateien zu compilieren(Was in VS seeeeeehr viel Arbeit ist)
MfG

close1
Antworten