Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何将QGLWidget子类化以使用glew?_Qt_Qt5_Glew_Qglwidget - Fatal编程技术网

Qt 如何将QGLWidget子类化以使用glew?

Qt 如何将QGLWidget子类化以使用glew?,qt,qt5,glew,qglwidget,Qt,Qt5,Glew,Qglwidget,我正在努力获得使用glew编译的QGLWidget的子类。我正在Windows7上运行Qt5.0.1+MingW4.7。Glew 1.7.0已使用上述MinGW进行编译 我将QGLWidget子类化为UGGLWidget,并在QGLWidget包含之前包含“GL/glew.h”。编译时,我收到了200个关于以下内容的错误: “功能”重新声明为不同类型的符号 冲突声明“typedef” 因此,我的问题是: 如何获得使用在Qt5下编译的glew的QGLWidget子类? 编辑:我在另一个设置(

我正在努力获得使用glew编译的QGLWidget的子类。我正在Windows7上运行Qt5.0.1+MingW4.7。Glew 1.7.0已使用上述MinGW进行编译

我将QGLWidget子类化为UGGLWidget,并在QGLWidget包含之前包含
“GL/glew.h”
。编译时,我收到了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

以下解决了我的问题,这适用于所有地方,包括glew:

#include "GL/glew.h"
#define QT_NO_OPENGL_ES_2
另一个选项:在配置步骤中使用
-opengl desktop
从源代码构建Qt5.0.1


由于某种原因,我的Qt5.0.1安装中定义了
QT\u OPENGL\u ES\u 2
。通过查看QGLWidget.h中的inlcudes,我在QtCore/qconfig.h中发现了以下内容

这导致了GLES2/gl2.h的加入,这与glew不一致。知道这个问题与GLES2有关,我遇到了一个和一个。 如果我理解正确,那么为Qt5.0.1提供的QtSDK安装程序已构建为启用GLES

祝你今天愉快,

~Moritz

以下解决了我的问题,这适用于所有地方,包括glew:

#include "GL/glew.h"
#define QT_NO_OPENGL_ES_2
另一个选项:在配置步骤中使用
-opengl desktop
从源代码构建Qt5.0.1


由于某种原因,我的Qt5.0.1安装中定义了
QT\u OPENGL\u ES\u 2
。通过查看QGLWidget.h中的inlcudes,我在QtCore/qconfig.h中发现了以下内容

这导致了GLES2/gl2.h的加入,这与glew不一致。知道这个问题与GLES2有关,我遇到了一个和一个。 如果我理解正确,那么为Qt5.0.1提供的QtSDK安装程序已构建为启用GLES

祝你今天愉快,

~Moritz

注意,QT 4.8RC发行说明中说:
包括QtOpenGL将不会与GLEW一起工作,因为QGLFunctions将取消定义GLEW的定义。

请注意,QT 4.8RC发行说明中说:
包括QtOpenGL将无法与GLEW结合使用,因为QGLFunctions将取消定义GLEW的定义。

是否初始化了GLEW@Cmannet85是的,我在initializeGL()中有。虽然我的问题已经在于编译子类。glewInit()应该只在运行时起作用。我将在问题中澄清这一点,谢谢。我试图抛弃glew,并将赌注押在QGLWidget上,它提供了我所需要的所有功能,但也失败了。glPointSize、GLDeleteVertexArray和其他有关顶点数组的函数不在QGLWidget的范围内声明。您的图形卡驱动程序支持哪个版本的OpenGL?@cmannett85它支持OpenGL 4.2。我有一个使用opengl 3.3核心配置文件的应用程序,它在freeglut/glew中运行良好。我想将此应用程序移动到Qt。对于当前的“解决方案”,我回到了Qt4.7。我还在想Qt5.0.1和我的代码出了什么问题。你初始化了GLEW吗@Cmannet85是的,我在initializeGL()中有。虽然我的问题已经在于编译子类。glewInit()应该只在运行时起作用。我将在问题中澄清这一点,谢谢。我试图抛弃glew,并将赌注押在QGLWidget上,它提供了我所需要的所有功能,但也失败了。glPointSize、GLDeleteVertexArray和其他有关顶点数组的函数不在QGLWidget的范围内声明。您的图形卡驱动程序支持哪个版本的OpenGL?@cmannett85它支持OpenGL 4.2。我有一个使用opengl 3.3核心配置文件的应用程序,它在freeglut/glew中运行良好。我想将此应用程序移动到Qt。对于当前的“解决方案”,我回到了Qt4.7。我仍然想知道Qt5.0.1和我的代码出了什么问题。
#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