PDA

View Full Version : Can't compile custom class derived from QGLWidget



stealth86
5th July 2007, 17:53
I'm trying to derive a class from QGLWidget based on the example code that ships with Qt. I can't get it to work though, and I'm not sure why.

Here's the code.


#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QtOpenGL/QGLWidget>
#include <QWidget>

class QPaintEvent;
class QWidget;

class GLWidget : public QGLWidget
{
Q_OBJECT

public:
GLWidget( QWidget *parent, QImage *pQImage );

protected:
void paintEvent( QPaintEvent *event );

private:
QImage *m_pQImage;
};


#endif



#include <QtGui>
#include "glwidget.h"

GLWidget::GLWidget( QWidget *parent, QImage *pQImage )
: QGLWidget(parent)
{
setFixedSize(640, 480);
m_pQImage = pQImage;
}

void GLWidget::paintEvent(QPaintEvent *event)
{
//QPainter painter;
//painter.begin(this);
//painter.drawImage( 0, 0, m_pQImage );
//painter.end();
}

Compile errors:

glwidget.cpp:(.text+0x40): undefined reference to `QGLWidget::QGLWidget(QWidget*, QGLWidget const*, QFlags<Qt::WindowType>)'
glwidget.cpp:(.text+0x7f): undefined reference to `QGLWidget::~QGLWidget()'
glwidget.cpp:(.text+0xc0): undefined reference to `QGLWidget::QGLWidget(QWidget*, QGLWidget const*, QFlags<Qt::WindowType>)'
glwidget.cpp:(.text+0xff): undefined reference to `QGLWidget::~QGLWidget()'
moc_glwidget.cpp:(.text+0x15): undefined reference to `QGLWidget::qt_metacall(QMetaObject::Call, int, void**)'
moc_glwidget.cpp:(.text+0x7d): undefined reference to `QGLWidget::qt_metacast(char const*)'
moc_glwidget.cpp:(.text._ZN8GLWidgetD0Ev[GLWidget::~GLWidget()]+0x2b): undefined reference to `QGLWidget::~QGLWidget()'
moc_glwidget.cpp:(.text._ZN8GLWidgetD1Ev[GLWidget::~GLWidget()]+0x25): undefined reference to `QGLWidget::~QGLWidget()'
moc_glwidget.o:(.rodata+0x0): undefined reference to `QGLWidget::staticMetaObject'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0x1c): undefined reference to `QGLWidget::event(QEvent*)'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0x4c): undefined reference to `QGLWidget::paintEngine() const'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0x84): undefined reference to `QGLWidget::resizeEvent(QResizeEvent*)'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0xe0): undefined reference to `QGLWidget::updateGL()'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0xe4): undefined reference to `QGLWidget::updateOverlayGL()'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0xe8): undefined reference to `QGLWidget::initializeGL()'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0xec): undefined reference to `QGLWidget::resizeGL(int, int)'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0xf0): undefined reference to `QGLWidget::paintGL()'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0xf4): undefined reference to `QGLWidget::initializeOverlayGL()'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0xf8): undefined reference to `QGLWidget::resizeOverlayGL(int, int)'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0xfc): undefined reference to `QGLWidget::paintOverlayGL()'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0x100): undefined reference to `QGLWidget::glInit()'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0x104): undefined reference to `QGLWidget::glDraw()'
moc_glwidget.o:(.rodata._ZTV8GLWidget[vtable for GLWidget]+0x11c): undefined reference to `non-virtual thunk to QGLWidget::paintEngine() const'
moc_glwidget.o:(.rodata._ZTI8GLWidget[typeinfo for GLWidget]+0x8): undefined reference to `typeinfo for QGLWidget'
*** Exited with status: 2 ***


Do I need to specify any libraries to link against?

jacek
5th July 2007, 17:55
Try adding "QT += opengl" to your .pro file.