5

Ubuntu 10.04 の Code::Blocks で Qt および OpenGL プログラムをコンパイルしようとしていました。「GLWidget の vtable への未定義の参照」を取得します

#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

これは、ヘッダー ファイルに Q_OBJECT を追加するときに時々発生し、moc_ ファイルが見つからないことを意味します。

個人的な経験から、次のことを行うと問題が解決することがわかりました。

  1. $ qmakeファイル名.pro
  2. $メイク
于 2011-11-03T17:23:16.283 に答える
1

「GLWidget の vtable への未定義の参照」は、おそらく、GLWidget の最初の非インライン仮想関数の定義が実行可能ファイルにリンクされていないことを意味します。

現在の場合、moc によって生成されたファイルによって提供されるべきだと思います (しかし、私は QT 用にプログラムしていないので、ここで間違っている可能性があります)。

于 2010-12-24T14:23:07.863 に答える
1

I had this exact problem after adding Q_OBJECT to one of the header files in my project.

I was only getting this error message from within QT Creator, and not when I built my project from the Linux command line.

For me, the solution was to delete the YourProjectName-build-desktop folder which resides on the same level as your project directory. Then when I built the project from within QT Creator, it magically worked.

于 2012-03-02T03:27:28.357 に答える