Qt in C++ Projekt einbinden

Alles rund um die Programmierung mit Qt
Antworten
Etuel
Beiträge: 5
Registriert: 7. Dezember 2010 12:33

Qt in C++ Projekt einbinden

Beitrag von Etuel »

Guten Tag!

Ich hoffe ihr könnt mir helfen, da bis jetzt keine Dokumentation bei Google mir helfen konnte.

Und zwar geht es wie im Titel beschrieben darum, dass ich Qt in ein bestehendes C++ Projekt einbinden will. Rahmenbedingung: Unter Eclipse und Ubuntu.

Dafür erstelle ich wie gewohnt ein normales C++ Projekt..dann erstelle ich eine Qt Gui Class. Nach diversen Internetforen müsste ich jetzt über die Konsole folgende Befehle ausführen:
qmake -project
qmake
make

Dies geht auch alles ohne weitere Schwierigkeiten. Danach treten jetzt doch diverse Fehler in der Headerdatei von der Gui, der ui_-Datei von der Gui und komischerweise wird auch eine Datei mit dem Präfix moc_ erstellt.

Ab hier weiß ich leider nicht mehr weiter, vielleicht könnt ihr mir ja helfen oder habt das ganze schonnmal gemacht?

Achja, die ganzen QT-Bibliotheken habe ich natürlich vorher schon in die Includes gepackt.

Grüße,
Etuel
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Prinzipiell gibt es beim Kompilieren nicht den einen Fehler, das weißt du. Deshalb solltest du deinen spezifischen Fehler, den du bekommst, hier posten.
Ansonsten gibt es ein Qt-Plugin für Eclipse, was aber gar keinen guten Ruf hat... Warum ist Eclipse Pflicht? Kann es nicht der QtCreator sein? Der ist extrem gut! (nicht nur für Qt).

Und wenn du jetzt dann eh gleich am Fehler posten bist, kannst du die relevanten Code-Stellen auch noch mit angeben, dann kann man gleich ganz spezifische Lösungswege aufzeigen :P
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und was für Fehler treten auf?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Etuel
Beiträge: 5
Registriert: 7. Dezember 2010 12:33

Beitrag von Etuel »

Leider muss es QT unter Eclipse sein, weil wir von der Uni aus für ein bestehndes C++ Projekt mit QT eine Gui erstellen sollen.

Der erste Fehler ist wie gesagt in der moc_ Datei:

Code: Alles auswählen

/home/ubuntu/workspace/maker2/Debug/../moc_trans.cpp:59: undefined reference to `QWidget::qt_metacast(char const*)'
Danach folgen eigentlich nur mehrere ähnliche Fehler wie:

Code: Alles auswählen

./moc_trans.o:(.rodata+0x0): undefined reference to `QWidget::staticMetaObject'
Wie gesagt, es sind so viele Fehler, dass mir bei meinem Weg Qt in C++ einzubinden schon das Gefühl kommt, einen Fehler zu machen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QWidget ist in der QtGui Library. Wurde zum kompilieren wirklich das per qmake erzeugte Makefile benutzt?
Hier steht wie qmake zu benutzen ist: http://doc.trolltech.com/4.7/qmake-tutorial.html
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Etuel
Beiträge: 5
Registriert: 7. Dezember 2010 12:33

Beitrag von Etuel »

Nein, leider bringt mir das auch nichts, wenn ich qmake mit dem richtigen makefile ausführe.

Vielleicht hilft es ja, wenn ich meinen Ablauf nochmal genau schildere:

Zuerst lege ich mein C++-Projekt an, füge danach eine Qt Gui Class ein. Diese erstellt eine bei mir "trans.h", "trans.cpp" und eine "trans.ui".

Danach erstelle ich über

Code: Alles auswählen

qmake -project
meine projektname.pro.

Diese hat den Inhalt

Code: Alles auswählen

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += trans.h
FORMS += trans.ui
SOURCES += main.cpp trans.cpp
Danach erstell ich mit

Code: Alles auswählen

qmake -o Makefile projektname.pro
die Makefile.

Danach geh ich dann hin und führe den Make Befehl auf, worauf hin mehrere Dateien erstellt werden:

moc_trans.cpp, ui_trans.h, main.p, moc_trans.p, trans.o

Wenn ich dann das Projekt ganz normal builden will kommen die oben erwähnten Fehler.
Etuel
Beiträge: 5
Registriert: 7. Dezember 2010 12:33

Beitrag von Etuel »

Mhm okay, nachdem ich jetzt in meine trans.h noch folgendes eingefügt habe:

Code: Alles auswählen

#include <QObject>
#include "ui_trans.h"
Hat sich das ganze darauf reduziert das mein trans.h an folgender Stelle

Code: Alles auswählen

private:
    Ui::transClass ui;
diesen Fehlercode ausspuckt:

../trans.h:16: error: ‘Ui’ has not been declared
../trans.h:16: error: ISO C++ forbids declaration of ‘transClass’ with no type
../trans.h:16: error: expected ‘;’ before ‘ui’
make: *** [moc_trans.o] Fehler 1
Bei Interesse kann ich auch gerne noch den Inhalt der ui_trans.h posten, aber da ist der namespace Ui auf jeden Fall deklariert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Kannst du mal alle Dateien posten? Also
*) trans.h
*) trans.cpp
*) main.cpp
*) ui_trans.h
Dann kann man den Fehler schneller finden. Thx :)
Etuel
Beiträge: 5
Registriert: 7. Dezember 2010 12:33

Beitrag von Etuel »

Hab mal die Dateien hier hochgeladen, danke schonmal soweit für eure Hilfe!
Dateianhänge
Dateien.zip
Die angeforderten Daten.
(2.1 KiB) 51-mal heruntergeladen
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

guuuut. Das baut und ist auch gut so.
Wenn du den Qt-Dreisatz (qmake --project && qmake && make) in der Konsole im Projektordner macht, geht das dann?
Wenn ich dann das Projekt ganz normal builden will kommen die oben erwähnten Fehler.
heißt das übder den "build"-Knopf in eclipse? Verwendet Eclpise überhaupt Makefiles? Baut Eclipse im falschen BuildDir? Liegt das ui_trans.h in einem anderen Dir?
Zur Info: Der "Qt-Dreisatz" (qmake --project sollte NUR EINMAL wenn überhaupt ganz am Anfang für ein initialies .pro verwendet werden!!!!!) baut beim "make" schon alles fertig, das make generiert nicht nur die ui_trans.h und das moc. Du hast dann wirklich schon ein fertiges Binary! Schau mal mit "ls" nach.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn ui_trans.h korrekt includiert wird, ist namespace Ui auch vorhanden
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten