PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem beim compilieren eines qt programms


badBACKSLASH
11.09.2005, 11:45
HALLO erstmal!

ich habe vor kurzem angefangen mich fuer GUI programmierung zu intressieren und habe nun ein kleies problem mit volgedem Code:

/*badCat.cpp*/
#include <qapplication.h>
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qlabel.h>
#include <qtextedit.h>

class LoadUrl : public QWidget {
Q_OBJECT
public:
/*konstruktor*/
LoadUrl() {
initializer_urlEingabeelemente();
}//end konstruktor

void initializer_urlEingabeelemente() {
/*zeichnen des labels wo "URL:" drinnensteht*/
QLabel *label_urlWeiser = new QLabel(this);
label_urlWeiser -> setText("URL:");
label_urlWeiser -> setGeometry(10, 20, 61, 20);
/*zeichnen des textfeldes fuer die eingabe der URL*/
QLineEdit *lineEdit_urlEingabe = new QLineEdit(this);
lineEdit_urlEingabe -> setGeometry(40, 20, 860, 22);
/*zeichnen den buttons fuer das laden der URL*/
QPushButton *button_loadUrl = new QPushButton("load..." ,this);
button_loadUrl -> setGeometry(907, 16, 50, 30);
/*zeichnen des textEdits fuer den html text
(wahrscheinliche veraenderung waenn weiter im QT-Buch)*/
QTextEdit *textEdit_htmlAnzeige = new QTextEdit(this);
textEdit_htmlAnzeige -> setGeometry(10, 50, 940, 580);
}//end initializer_urlEingabeelemente
public slots:
void ladeWebSite(char* url) {}//end ladeWebSite
};// end LoadUrl

int main(int argc, char *argv[]) {
QApplication badCat(argc, argv);
LoadUrl *widget_badCat = new LoadUrl();
widget_badCat -> setGeometry(100, 100, 960, 640);
widget_badCat -> setCaption("badCat - iNet 8r0wZeR");

badCat.setMainWidget(widget_badCat);
widget_badCat -> show();
return badCat.exec();
}//end main

ich habe dafuer volgede projektdatei mit dem namen badBat.pro erstellt:

CONFIG += qt warn_on release
SOURCES = badCat.cpp
TARGET = badCAT

und meinen Code mache ich volgedermassen ausfuehrbar(unter linux):
qmake && make
dann kommt volgede fehlermaeldung:

[badbackslash@localhost badCAT]$ qmake && make
g++ -o badCAT badCat.o -L/usr/lib/qt-3.3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
badCat.o(.text+0x5b): In function `main':
/home/rsickinger/badCAT/badCat.cpp:11: undefined reference to `vtable for LoadUrl'
badCat.o(.text+0x62):/home/rsickinger/badCAT/badCat.cpp:11: undefined reference to `vtable for LoadUrl'
collect2: ld gab 1 als Ende-Status zurück
make: *** [badCAT] Fehler 1
[badbackslash@localhost badCAT]$

tja was mir noch aufgefallen ist:
waenn ich meinen code folgendermassen aendere:

...
#include <qlabel.h>
#include <qtextedit.h>

class LoadUrl : public QWidget {
//Q_OBJECT
public:
/*konstruktor*/
LoadUrl() {
...

dann laesst es sich kompilieren also muss es an dem irgenwie liegen oder??
waere super waenn jemand rat wuresste!!
na dann
mfg
bad\


MartinF
02.12.2005, 15:09
Die Klasse QWidget ist eine Spezialisierung der Klasse QObject, d.h. QWidget hat QObject als Basisklasse und erbt somit alle Attribute und Methoden von QObject. Ich vermute das es sich um ein Probklem mit dem Makro Q_OBJECT handelt. Da ich die Implementation von Q_OBJECT nicht genau kenne kann ich an dieser Stelle natürlich nur spekulieren. Jedenfalls sollte in Klassen, die QObject oder eine Spezialisierung von QObject erben, das Makro Q_OBJECT nicht eingefügt werden.

scope
23.12.2005, 16:23
durchforsche die QT-Docu nach "vtable" und / oder "LoadUrl"

Viel Erfolg, John