我很难得到一个使用glew编译的QGLWidget子类。我在Windows7上运行QT5.0.1+ MinGW 4.7。GleW1.7.0已经用said MinGW编译了。
我用UGGLWidget对QGLWidget进行了子类化,并在QGLWidget包含之前包含了"GL/glew.h"
。在编译时,我会得到以下200个错误:
因此,我的问题是:如何获得使用Qt5?编译的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)
发布于 2013-02-12 16:13:46
以下是我的问题,这个问题随处可见,其中包括glew:
#include "GL/glew.h"
#define QT_NO_OPENGL_ES_2
另一个选项:在配置步骤中使用-opengl desktop
从源代码构建Qt5.0.1。
出于某种原因,QT_OPENGL_ES_2
在我的Qt5.0.1安装中定义。通过查看QGLWidget.h中的内容,我在QtCore/qconfig.h中找到了以下内容
#if defined(QT_OPENGL_ES_2) && defined(QT_NO_OPENGL_ES_2)
# undef QT_OPENGL_ES_2
#elif !defined(QT_OPENGL_ES_2)
# define QT_OPENGL_ES_2
#endif
这导致包含了glew 2/gl2.h,这与glew不太合拍。知道这个问题与GLES2有关,我遇到了一个错误报告和一个QtProject邮政。如果我正确理解,那么为Qt5.0.1提供的QtSDK安装程序已经构建,这样就启用了GLES。
祝你今天愉快,
莫里茨
发布于 2013-04-27 14:09:47
注意,QT4.8RC发布说明说:包含QtOpenGL不会与GLEW一起工作,因为QGLFunctions将取消GLEW的定义。
https://stackoverflow.com/questions/14803658
复制相似问题