2016-01-10 3 views
3

Я пытаюсь запустить базовые примеры OpenGL с помощью QT Creator, чтобы дать цвет окну. Тем не менее, я получаю ошибку в компиляции при вызове инструкции OpenGL: glClearColor (1.0,1.0.0.0,1.0); The * .pro файл является следующим:Проблемы с OpenGL при запуске QT Creator

QT  += core gui opengl 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 
TARGET = test2 
TEMPLATE = app 
SOURCES += main.cpp\ 
     mainwindow.cpp \ 
    glwidget.cpp 
HEADERS += mainwindow.h \ 
    glwidget.h 
FORMS += mainwindow.ui 

glwidget.h является следующим:

#ifndef GLWIDGET_H 
#define GLWIDGET_H 
#include <QGLWidget> 
class GLWidget : public QGLWidget 
{ 
    Q_OBJECT 
public: 
    explicit GLWidget(QWidget *parent = 0); 
    void initializeGL();  
}; 
#endif // GLWIDGET_H 

glwidget.cpp является следующим:

#include "glwidget.h" 
GLWidget::GLWidget(QWidget *parent) : 
    QGLWidget(parent) 
{ 
} 
void GLWidget::initializeGL(){ 
    glClearColor(1.0,1.0,0.0,1.0); 
} 

Основной. cpp:

#include "mainwindow.h" 
#include <QApplication> 
int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 
    return a.exec(); 
} 

I hav e проверил, что в * .pro я включил opengl: QT + = core gui opengl Кроме того, я удалил папку «YourProjectName-build-desktop», созданную QT Creator, и снова построил без успеха.

Ошибка: C: \ test2 \ glwidget.cpp: 9: ошибка: не определено ссылка на `_imp__glClearColor @ 16' , где линия 9 glClearColor (1.0,1.0,0.0,1.0);

Какой дополнительный шаг мне не хватает?

Заранее спасибо за помощь

Приветствия © 2016 Microsoft Условия Конфиденциальность & печенье разработчиков English (United States)

+0

Какая ошибка возникает? – BDL

+0

Я получаю C: \ test2 \ glwidget.cpp: 9: ошибка: неопределенная ссылка на '_imp__glClearColor @ 16 ', где строка 9 - glClearColor (1.0.1.0.0.0.1.0); – Xalapa

ответ

4

попробуйте добавить LIBS += -lOpengl32 в файл .pro

и если вы re ` используя qt 5, вы также можете воспользоваться этим путем

QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions(); 
f->glClearColor(1.0f, 1.0f, 0.0f, 1.0f); 

http://doc.qt.io/qt-5/qopenglwidget.html http://doc.qt.io/qt-5/qopenglcontext.html

EDIT:

просто проверял ли это работает. но требует qt5. Функции Legacy, по-видимому, определены в qt 5, поэтому я забыл QOpenGLFunctions.

#include <QOpenGLWidget> 

class GLWidget : public QOpenGLWidget 
{ 
public: 
    GLWidget(QWidget* parent) : 
     QOpenGLWidget(parent) 
    { 

    } 

protected: 
    void initializeGL() 
    { 
     glClearColor(1.0f, 1.0f, 0.0f, 1.0f); 
    } 

    void paintGL() 
    { 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

     glColor3f(1,0,0); 
     glBegin(GL_TRIANGLES); 
     glVertex3f(-0.5, -0.5, 0); 
     glVertex3f(0.5, -0.5, 0); 
     glVertex3f(0.0, 0.5, 0); 
     glEnd(); 
    } 

    void resizeGL(int w, int h) 
    { 
     glViewport(0, 0, w, h); 
    } 
}; 
+0

Спасибо, он работал для initializeGL. После этой функции у меня есть функция paintGL (я не публиковал), которая включает в себя: glClear (GL_COLOR_BUFFER_BIT); glColor3f (1,0,0); glBegin (GL_TRIANGLES); glVertex3f (-0,5, -0,5, 0); glVertex3f (0,5, -0,5, 0); glVertex3f (0,0, 0,5, 0); glEnd() Я применил те же изменения, но не сработал. – Xalapa

+0

@ArturoReyesLopez Я добавляю некоторый тестовый код, который требует qt 5, хотя – DevGuy

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