5

我试图在 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 */

我从这个人那里借了代码来看看它是否有效,因为同样的原因我的代码不起作用。代码

这是 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) {
    ...
    }
}

我从 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();
}
4

5 回答 5

5

在你的 project.pro 文件中添加

QT += opengl

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

于 2010-12-24T11:40:53.623 回答
3

清理您的项目并在其上运行 qmake。

于 2011-02-05T20:55:17.903 回答
1

'undefined reference to 'vtable for GLWidget' 很可能意味着 GLWidget 的第一个非内联虚函数的定义未链接到可执行文件中。

在目前的情况下,我的猜测是它应该由 moc 生成的文件提供(但由于我不是为 QT 编程,我可能会在这里弄错)。

于 2010-12-24T14:23:07.863 回答
1

Q_OBJECT在我的项目中添加一个头文件后,我遇到了这个确切的问题。

我只是从 QT Creator 中收到此错误消息而不是在我从 Linux 命令行构建项目时收到此错误消息。

对我来说,解决方案是删除与YourProjectName-build-desktop项目目录位于同一级别的文件夹。然后,当我从 QT Creator 中构建项目时,它神奇地工作了。

于 2012-03-02T03:27:28.357 回答
1

有时在将 Q_OBJECT 添加到头文件时会发生这种情况,这可能意味着缺少 moc_ 文件。

我从个人经验中发现,执行以下操作已解决了该问题:

  1. $ qmake文件名.pro
  2. $ 制作
于 2011-11-03T17:23:16.283 回答