我很努力地得到一個使用glew的QGLWidget編譯的子類。我在Windows 7上運行Qt 5.0.1 + MinGW 4.7。Glew 1.7.0已經與MinGW一起編譯。如何繼承QGLWidget以使用glew?
在QGLWidget包含之前,我已經用UGGLWidget子類化了QGLWidget,並且包含"GL/glew.h"
。編譯時,我得到200個錯誤有關:
- '功能' 重新聲明爲不同意義的符號
- 衝突的聲明 '的typedef'
所以我的問題的: 我如何得到一個QGLWidget的子類,它使用在Qt5下編譯的glew?
編輯:我試着用另一設置(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)
您是否初始化GLEW? http://glew.sourceforge.net/basic.html – cmannett85 2013-02-11 08:31:33
@ cmannett85是的,我在初始化GL()。雖然我的問題已經在編譯子類。 glewInit()應該只在運行時才重要。我會在問題中澄清這一點,謝謝。 – 2013-02-11 09:46:59
我試着將glew放到一起,把我的賭注放在提供我需要的所有功能的QGLWidget上,但是這也失敗了。 glPointSize,glDeleteVertexArrays和其他關於頂點數組的函數沒有在QGLWidget的範圍內聲明。 – 2013-02-12 01:47:15