未定义的引用vtable,Linux中的Qt

Mor*_*Fre 5 c++ opengl ubuntu qt qglwidget

我试图在Ubuntu 10.04中的Code :: Blocks下编译一个Qt和OpenGL程序.我得到'未定义的'vtable for GLWidget'

#ifndef _GLWIDGET_H
#define _GLWIDGET_H

#include <QtOpenGL/QGLWidget>
#include "stdlib.h"

class GLWidget : public QGLWidget {

    Q_OBJECT // must include this if you use Qt signals/slots

public:
    GLWidget(QWidget *parent = 0);
    ~GLWidget();
protected:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();
    void keyPressEvent(QKeyEvent *event);
};

#endif  /* _GLWIDGET_H */
Run Code Online (Sandbox Code Playgroud)

我借用了这个人的代码,看看它是否有效,因为我的工作原因是因为同样的原因.

这是GLWidget.cpp:

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

GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent) {
    setMouseTracking(true);
}

GLWidget::~GLWidget()
{
}

void GLWidget::initializeGL() {
   ...
}

void GLWidget::resizeGL(int w, int h) {
   ...
}

void GLWidget::paintGL() {
    ...
}

void GLWidget::keyPressEvent(QKeyEvent* event) {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我从GL部分删除了代码以使其更短.如果你需要它,我总是可以发布它.

#include <QtGui/QApplication>
#include <QtOpenGL/QGLWidget>
#include "glwidget.h"

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

    QApplication app(argc, argv);

    GLWidget window;
    window.resize(800,600);
    window.show();

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

ism*_*ail 5

在你的project.pro文件中添加

QT += opengl
Run Code Online (Sandbox Code Playgroud)

所以它知道它必须链接到GL库.