Qt4和GLew似乎互不兼容

Posted

技术标签:

【中文标题】Qt4和GLew似乎互不兼容【英文标题】:Qt4 and GLew seem to be incompatible with each other 【发布时间】:2012-02-12 18:33:19 【问题描述】:

我正在尝试从 GLee 迁移到 glew,因为 GLee 在 VC2010 下无法运行,并且有一段时间没有更新。我在使用头文件时遇到问题,因为这两个库都希望首先定义它们的头文件。 glew 不喜欢先定义 gl.h(在 QtOpenGL 中定义),QtOpenGL 明确指出 glew 应该在 QtOpenGL 之后定义。

搜索显示很多人同时使用 glew 和 Qt 都很好。至少,我想要一个关于兼容性的明确答案。我已将 .h 和 .c 文件添加到我的项目中,因为将来我不必为安装 .lib 和 .dll 文件而烦恼。

这是 QtOpenGL 中的代码,如果首先包含 glew,就会被调用:

#ifdef __GLEW_H__
#warning qglfunctions.h is not compatible with GLEW, GLEW defines will be undefined
#warning To use GLEW with Qt, do not include <QtOpenGL> or <QGLFunctions> after glew.h
#endif

如果首先包含 QtOpenGL,则调用以下代码:

#if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H)
#error gl.h included before glew.h
#endif

【问题讨论】:

【参考方案1】:

GLEW 和 qtfunctions 都定义了相同的东西。你不能一起使用它们,你不应该想要。您使用 Qt 的目的只是初始化 OpenGL 上下文。所以不要包括 qtfunctions。尝试只包含 QGLWidget 和类需要的东西。

【讨论】:

我想使用未在 QtOpenGL 中定义的着色器程序和缓冲区对象(但这是创建 OGL 渲染窗口所必需的)。如果没有 GLEW,我只能在微软的头文件中使用古老版本的 OpenGL。 @usm:我解释了如何做到这一点:停止包含 qtfunctions。首先包含 GLEW,然后只包含创建 QGLWidget 实例所需的最少内容。哦,没有人强迫你使用 Qt;如果你不喜欢,还有很多其他跨平台的方式来创建 OpenGL 窗口。 我很抱歉。在我的挫折中,我误解了你的答案,这意味着 qtfunctions 也用于访问指向较新的 GL 函数的指针,就像 GLEW 一样。另外,我不知道 QtOpenGL 实际上是其他几个头文件的组合,所以你的建议超出了我的想象。我休息了一下,头脑清晰地开始了另一次尝试。在 vc2010 的 Qt 的预编译版本中缺少 Qt dll 存在问题,但是通过一些工作(手动构建 Qt)我终于让它工作了。感谢您的所有帮助!

以上是关于Qt4和GLew似乎互不兼容的主要内容,如果未能解决你的问题,请参考以下文章

关于编写Windows程序中启动兼容性问题

Qt4安装使用QSerialPort

似乎无法摆脱兼容性视图?

无法链接 OpenGL 兼容性配置文件(无法识别 EXT 符号)

探究php的memcache和memcached扩展读写数组数据不相兼容原因

GLEW 着色器似乎不受支持