我试图在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 */
我借用了这个人的代码,看看它是否有效,因为我的工作原因是因为同样的原因。 Code
这是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();
}
答案 0 :(得分:5)
在project.pro文件中添加
QT += opengl
所以它知道它必须链接到GL库。
答案 1 :(得分:3)
清理项目并在其上运行qmake。
答案 2 :(得分:1)
'未定义对'vtable for GLWidget'的引用很可能意味着GLWidget的第一个非内联虚函数的定义未在可执行文件中链接。
在目前的情况下,我的猜测是它应该由moc生成的文件提供(但由于我没有为QT编程,我可能会在这里弄错。)
答案 3 :(得分:1)
有时会在将Q_OBJECT添加到头文件时发生这种情况,并且可能意味着缺少moc_文件。
我从个人经验中发现,做到以下几点已经解决了这个问题:
答案 4 :(得分:1)
将Q_OBJECT
添加到项目中的某个头文件后,我遇到了这个问题。
我只是从在 QT Creator中收到此错误消息,而不是从Linux命令行构建项目时。
对我来说,解决方案是删除与项目目录位于同一级别的YourProjectName-build-desktop
文件夹。然后,当我从QT Creator中构建项目时,它神奇地工作了。