使用QGLWidget设置GLEW

时间:2015-05-08 13:55:09

标签: c++ qt opengl glew

我在Qt中设置GLEW时出现问题,我正在使用Microsoft Visual C ++ 2012-Compiler。这是我的班级

#ifndef MYQOPENGLWIDGET_H
#define MYQOPENGLWIDGET_H

#define QT_NO_OPENGL_ES_2

#define GLEW_STATIC
#include <GL/glew.h>
#include <QGLWidget>
#include <QMessageBox>

#include <iostream>


class MyQOpenGLWidget : public QGLWidget{

public:
MyQOpenGLWidget(QWidget *parent = 0): QGLWidget(parent){}

void initializeGL()
{



    GLenum err = glewInit();

    if(err != GLEW_OK)
    {
        QMessageBox::information(0, "Error!", QString("Failed to initialize GLEW ") + reinterpret_cast<const char*>(glewGetErrorString(err)), QMessageBox::Yes );
        exit(1);
    }
    else
    {
        QMessageBox::information(0, "Success!", QString("Succeded to initialize GLEW! "), QMessageBox::Yes );

    }

    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    glEnable(GL_DEPTH_TEST);

    std::cout << "Leaving initializeGL" << std::endl;
}

void paintGL()
{
    std::cout << "paintGL()" << std::endl;
}


void resizeGL(int w, int h)
{
    if(h == 0)
      h=1;
    glViewport(0,0,w,h);

    std::cout << "resizeGL()" << std::endl;

    glOrtho(-1, 1, -1, 1, -1, 1);

}

};

#endif // MYQOPENGLWIDGET_H

在我的pro文件中,我成功链接到GLEW(它包含在gltools.lib中,它来自OpenGLSuperbible)(顺便说一下,我在这里使用的库必须是正确的,因为我有一个我创建的工作项目使用Visual Studio和相同的编译器。)

QT       += core gui widgets

QT += opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled2
TEMPLATE = app

INCLUDEPATH += "C:/Users/fin/Documents/GLEWTEst/include"
LIBS += "C:/Users/fin/Documents/GLEWTEst/lib/gltools.lib"

SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h \
    myqopenglwidget.h

FORMS    += mainwindow.ui

DISTFILES += \
    ../build-untitled2-Desktop_Qt_5_4_1_MSVC2012_OpenGL_32bit-Debug/debug/untitled2.exe

现在发生的是,程序启动,并正确初始化GLEW并调用initializeGL(),resizeGL()然后调用paintGL() 然后它说程序以退出代码1终止。 所以只是一个没有任何错误消息的程序崩溃。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我通过删除

解决了这个问题
QMessageBox::information(0, "Success!", QString("Succeded to initialize GLEW! "), QMessageBox::Yes );

来自上面的代码。但是,我不知道为什么会这样。