Seite 1 von 1

"#include <QApplication>" != "#include

Verfasst: 30. Oktober 2006 10:20
von gerome69
Hallo zusammen,
habe mir gerade mal Codeblocks als IDE für Windows heruntergeladen und versucht, ein kleines "Hello World"-QT damit zu kompilieren (QT 4).

Programmcode:

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);

     QPushButton hello("Hello world!");
     hello.resize(300, 130);

     hello.show();
     return app.exec();
 }
Bleibt hängen mit "QApplication : no such file".
Ändere ich die beiden includes auf:

Code: Alles auswählen

#include <qapplication.h>
#include <QpushButton.h>
geht es ohne Probleme. *verwirrt*

Aus einer Dos-Box mit "make" läßt sich beides kompieren, QTDIR ist richtig als globale Variable gesetzt und $QTDIR\bin ist im PATH.

In der Projektdatei von Codeblocks steht u.a. ohne mein Zutun:

Code: Alles auswählen

				<Compiler>
					<Add directory="k:\qt_4.1.4\include"/>
					<Add directory="k:\qt_4.1.4\include\Qt"/>
					<Add directory="k:\qt_4.1.4\include\Qt\ActiveQt"/>
					<Add directory="k:\qt_4.1.4\include\Qt\Qt3Support"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtAssistant"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtCore"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtDesigner"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtGui"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtMotif"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtNetwork"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtNsPlugin"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtOpenGL"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtSql"/>
					<Add directory="k:\qt_4.1.4\include\Qt\QtXml"/>
				</Compiler>
				<Linker>
					<Add library="libQt3Support4.a"/>
					<Add library="libQtAssistantClient.a"/>
					<Add library="libQtCore4.a"/>
					<Add library="libQtDesigner4.a"/>
					<Add library="libQtDesignerComponents4.a"/>
					<Add library="libQtGui4.a"/>
					<Add library="libqtmain.a"/>
					<Add library="libQtNetwork4.a"/>
					<Add library="libQtOpenGl4.a"/>
					<Add library="libQtSql4.a"/>
					<Add library="libQtXml4.a"/>
					<Add directory="k:\qt_4.1.4\lib"/>
				</Linker>
Das sieht doch eigentlich sehr richtig aus.
Und im Verzeichnis k:\qt_4.1.4\include\Qt\QtCore ist die Datei "QApplication", die nur eine Zeile enthält:
#include <qapplication.h>
Und dieser "echte" Header qapplication.h ist im gleichen Verzeichnis.

Langer Rede, kurzer Sinn: kann mir jemand diese Merkwürdigkeit von Codeblocks erklären bzw. noch besser: weiß, wie man das löst?!

Danke schön für Tips, Bernd[/code]

Verfasst: 30. Oktober 2006 19:31
von -Marco-
poste mal den Compiler-Aufruf von Codeblocks.
Ansonsten empfehle ich dir qmake bzw. makefiles zu verwenden, sonst bekommst du irgendwann mit dem moc und uic Probleme.

BTW: willst du Qt wirklich statisch linken?

Verfasst: 1. November 2006 12:17
von gerome69
-Marco- hat geschrieben:poste mal den Compiler-Aufruf von Codeblocks.
Ansonsten empfehle ich dir qmake bzw. makefiles zu verwenden, sonst bekommst du irgendwann mit dem moc und uic Probleme.
Wenn ich den wüßte. Ist nicht zu sehen.
Im Fenster steht nur:

Project : QT Application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\Dokumente und Einstellungen\root\Desktop\QTTest\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.cpp
-Marco- hat geschrieben: BTW: willst du Qt wirklich statisch linken?
Upps, natürlich nicht. Das war mir noch garnicht aufgefallen. Danke für den Hinweis.

Ich seh schon: ich bleib lieber bei devcpp für die Codeeingabe und die Dosbox mit qmake und make fürs Kompilieren.

Gruß, Bernd

Verfasst: 2. November 2006 16:42
von RHBaum
BTW: willst du Qt wirklich statisch linken?
Woran siehst du bitte das er die qt wirklich statisch linkt ?

Ciao ...

Verfasst: 2. November 2006 22:41
von -Marco-
RHBaum hat geschrieben: Woran siehst du bitte das er die qt wirklich statisch linkt ?
an den statischen Bibliotheken (*.a-Files) in der Projektdatei.

@gerome69
zumindest nach einem Compiler-Fehler sollte im Build-Log der Compileraufruf noch zu finden sein.

Verfasst: 6. November 2006 21:01
von uhu01
Hy!

Du kannst ruhig bei Code::Blocks bleiben, stell als precompile-Step einfach "qmake" ein, hake bei deinen targets die option "Custom Makefile" an, dann startet Code::Blocks qmake, und dann make mit deinem Makefile...

mfg
uhu01

Verfasst: 7. November 2006 12:35
von RHBaum
Zitat:
BTW: willst du Qt wirklich statisch linken?

Woran siehst du bitte das er die qt wirklich statisch linkt ?
unter windows, also auch wenn man den mingw nimmt, hat irgendwer mal eingefuehrt das man zu dynamische libs (dll) ne statische proxy lib mit dazu baut. Scheint sich irgendwie bewaehrt zu haben ^^

Das er ne qt4core.lib (oder .a) statisch dazulinkt, heisst nicht das die lib selber nix anderes macht als die qt4core.dll anzuziehen und alle anfragen an die weiterzuleiten. QT ist dann immer noch dynamisch gebunden.

Bei der QT4 muss man imho beim buildprozess der qt selber festlegen, ob man dynamsich oder statische version baun will. die qt4core.lib (oder .a) wird man immer statisch dazu binden ...

Ciao ....