【问题标题】:Unable to compile Qt using QGLWidget无法使用 QGLWidget 编译 Qt
【发布时间】:2016-01-03 20:21:22
【问题描述】:

我正在用 C++ 编写一个 Maya 插件。但是,每当我想使用 QGLWidget 时,都会收到很多 vtable 错误:

Undefined symbols for architecture x86_64:
  "QGLWidget::paintEvent(QPaintEvent*)", referenced from:
      vtable for GLWidget in myOpenGLWindowClass.o
  "QGLWidget::qt_metacall(QMetaObject::Call, int, void**)", referenced from:
      vtable for GLWidget in myOpenGLWindowClass.o
  "QGLWidget::qt_metacast(char const*)", referenced from:
      vtable for GLWidget in myOpenGLWindowClass.o
  "QGLWidget::resizeEvent(QResizeEvent*)", referenced from:
      vtable for GLWidget in myOpenGLWindowClass.o
  "QGLWidget::paintOverlayGL()", referenced from:
      vtable for GLWidget in myOpenGLWindowClass.o
  "QGLWidget::resizeOverlayGL(int, int)", referenced from:
      vtable for GLWidget in myOpenGLWindowClass.o
  "QGLWidget::updateOverlayGL()", referenced from:
      vtable for GLWidget in myOpenGLWindowClass.
...

代码如下:

#include <QtGui/QApplication>
#include <QGLWidget>

class GLWidget :public QGLWidget
{

public:
    GLWidget(QWidget *parent = 0);
    virtual ~GLWidget(){};
protected:
    virtual void initializeGL();
    virtual void resizeGL( int width, int height );
    virtual void paintGL();

};

GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent)
{

}

void GLWidget::initializeGL() {
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_COLOR_MATERIAL);
    glEnable(GL_BLEND);
    glEnable(GL_POLYGON_SMOOTH);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glClearColor(0, 0, 0, 0);
}

void GLWidget::resizeGL(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void GLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1,0,0);
    glBegin(GL_POLYGON);
    glVertex2f(0,0);
    glVertex2f(100,500);
    glVertex2f(500,100);
    glEnd();
}

我的编译中是否需要添加一个库或其他错误?

【问题讨论】:

  • 请添加您尝试编译的方式(哪个编译器,哪个标志,...)
  • 感谢您的评论,我在编译中发现了一个缺失的框架(发布了答案)。谢谢!

标签: c++ qt maya vtable qglwidget


【解决方案1】:

我需要在编译中添加 QtOpenGL 框架。

【讨论】:

  • 如果您切换到使用更新的 QOpenGLWidget 也可以,因为它只是小部件模块的一部分。
猜你喜欢
  • 1970-01-01
  • 2014-11-14
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
相关资源
最近更新 更多