Я изо всех сил пытаюсь получить подкласс QGLWidget, скомпилированный с использованием glew. Я запускаю Qt 5.0.1 + MinGW 4.7 в Windows 7. Glew 1.7.0 был скомпилирован с указанным MinGW.Как подкласс QGLWidget использовать glew?
У меня есть подкласс QGLWidget с UGGLWidget и включен "GL/glew.h"
перед включением QGLWidget. При компиляции я получаю 200 ошибки о:
- «функция» повторно объявлен в качестве различного рода символ
- противоречивую декларацию «ЬурейеЕ»
Так что мой вопрос: Как я получить подкласс QGLWidget, который использует glew, скомпилированный под Qt5?
Edit: Я попробовал один и тот же подход, с другой установкой (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
@ cmannett85 Да, я делаю в initializeGL(). Хотя моя проблема уже заключается в компиляции подкласса. glewInit() должен иметь значение только во время выполнения. Я проясню это в вопросе, спасибо. –
Я пробовал перебирать gotw alltogether и ставить свои ставки на QGLWidget, предоставляя всю необходимую мне функциональность, но это тоже не удалось. glPointSize, glDeleteVertexArrays и другие функции, относящиеся к массивам вершин, не объявляются внутри области QGLWidget. –