2016-01-03 1 views
1

J'écris un plugin Maya en C++. Cependant chaque fois que je veux utiliser QGLWidget, je reçois beaucoup d'erreurs vtable:Impossible de compiler Qt en utilisant 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. 
... 

Voici le code:

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

est-il une bibliothèque que je dois ajouter dans ma compilation ou toute autre chose ne va pas?

+1

Veuillez ajouter comment vous essayez de compiler (quel compilateur, quels drapeaux, ...) – UnholySheep

+0

Merci à votre commentaire, j'ai trouvé un cadre manquant dans la compilation (posté la réponse). Merci ! –

Répondre

0

J'avais besoin d'ajouter le framework QtOpenGL dans la compilation.

+0

Si vous passez à l'utilisation du QOpenGLWidget plus récent qui fonctionnerait aussi, car cela fait partie du module widgets. –