我正在努力获得一个使用 glew 编译的 QGLWidget 子类。我在 Windows 7 上运行 Qt 5.0.1 + MinGW 4.7。Glew 1.7.0 已经用所述 MinGW 编译。
我将 QGLWidget 与 UGGLWidget 子类化,并"GL/glew.h"
在 QGLWidget 包含之前包含在内。编译时出现 200 个错误:
- “功能”重新声明为不同类型的符号
- 冲突的声明'typedef'
所以我的问题: 如何获得使用在 Qt5 下编译的 glew 的 QGLWidget 子类?
编辑:我用另一个设置(Qt4.7 + MinGW4.4)尝试了同样的方法。它编译并运行得很好。我也尝试过使用更新版本的 glew (Qt5.0.1 + MinGW4.7 + glew1.9.0) 这也不能编译并给出相同的编译错误。
这是编译器输出的混乱片段:
> In file included from
> ..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\mingw47_32\include/QtGui/qopengl.h:55:0,
> from ..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\mingw47_32\include\QtOpenGL/qgl.h:47,
> from ..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\mingw47_32\include\QtOpenGL/QGLWidget:1,
> from src\UGGLWidget.h:4,
> from src\UGGLWidget.cpp:2: ..\..\..\..\..\..\Qt\Qt5.0.1\5.0.1\mingw47_32\include/GLES2/gl2.h:614:153:
> error: 'void __glewVertexAttribPointer(GLuint, GLint, GLenum,
> GLboolean, GLsizei, const GLvoid*)' redeclared as different kind of
> symbol In file included from src\UGGLWidget.cpp:1:0:
> ..\3rdPartyLibs\glew\include/GL/glew.h:13609:46: error: previous
> declaration of 'void (__attribute__((__stdcall__)) *
> __glewVertexAttribPointer)(GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*)'
最后但并非最不重要的是子类的头文件和源文件。它现在真的只是空的。
来源:
//UGGLWidget.cpp
#include "GL/glew.h"
#include "UGGLWidget.h"
UGGLWidget::UGGLWidget(QWidget *parent) : QGLWidget(parent) { ... }
标题:
//UGGLWidget.h
#ifndef UGGLWIDGET_H
#define UGGLWIDGET_H
#include <QGLWidget>
class UGGLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit UGGLWidget(QWidget *parent = 0);
};
#endif // UGGLWIDGET_H
哦,也许 .pro 文件中的相关部分
QT += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += -L$$quote(../3rdPartyLibs/glew/lib/) -lglew32
LIBS += -lopengl32 -lglu32
INCLUDEPATH += $$quote(../3rdPartyLibs/glew/include)