2016-01-03 2 views
1

Я пишу плагин Maya в C++. Однако всякий раз, когда я хочу использовать QGLWidget, я получаю много виртуальные таблицы ошибок:Невозможно скомпилировать Qt с помощью QGLWidget

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

Есть ли библиотека, мне нужно добавить в моей компиляции или что-нибудь еще не так?

+1

Пожалуйста, добавьте, как вы пытаетесь скомпилировать (какой компилятор, какие флаги, ...) – UnholySheep

+0

Благодаря вашему комментарию я обнаружил недостающую структуру в компиляции (отправил ответ). Благодаря ! –

ответ

0

Мне нужно было добавить структуру QtOpenGL в компиляцию.

+0

Если вы переключитесь на использование нового QOpenGLWidget, который тоже будет работать, поскольку это только часть модуля виджетов. –

Смежные вопросы