PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [QT] vtable for >class< not found



Lin728
01-04-2006, 13:04
Hallo,

ich versuch mich gerade an meiner ersten QT Anwendung, das ganze kompiliert wunderbar nur beim linken bekomme ich fehle wie:


/tmp/ccdvER22.o(.text+0x1c): In function `PerfWidget::PerfWidget(QWidget*, char const*)':
qtperf.cpp: undefined reference to `vtable for PerfWidget'



Danke im Vorraus, lg



#include <qapplication.h>
#include <qwidget.h>


class PerfWidget : public QWidget
{
Q_OBJECT
public:
PerfWidget();
QSizePolicy sizePolicy() const;

protected:
void paintEvent( QPaintEvent * );
};

PerfWidget::PerfWidget() : QWidget()
{
setPalette( QPalette( QColor( 250, 250, 200) ) );
}

void PerfWidget::paintEvent( QPaintEvent * )
{
}


QSizePolicy PerfWidget::sizePolicy() const
{
return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
}


int main( int argc, char** argv )
{
QApplication app( argc, argv );
QWidget *window = new QWidget();
app.setMainWidget(window);
window->show();
return app.exec();
}

peschmae
01-04-2006, 13:27
Erst dachte ich das Problem sei dass du im Konstruktor "setPalette" aufrufst und das eine virtuelle Methode ist (falls das eine ist ;)).

Allerdings läuft das bei mir erst, wenn ich das Q_OBJECT Macro rausschmeisse. Bin gerade etwas verwirrt.

MfG Peschmä

anda_skoa
01-04-2006, 15:00
So eine Meldung ist meisten ein Hinweis auf einen fehlenden MOC Aufruf.

Mach mal ein

make clean

gefolgt von (nachdem du geprüft hast, ob der Header im .pro File auch bei HEADERS eingetragen ist)

qmake meinproject.pro
make

Ciao,
_

Lin728
01-04-2006, 17:00
@anda_skoa:
Ja stimmt, ich habe moc nicht verwendet da ich sowieso keine signal/slots verwendet habe.
Wahrscheinlich enthält das Makro code welches moc benötigt.

anda_skoa
01-04-2006, 22:18
Das Q_OBJECT Macro triggert beim Headerparsen von qmake das erzeugen der moc Regeln.

Daher geht es entweder ohne, oder mit einem neuen Makefile nach einfügen des Macros

ciao,
_