自定义 QOpenGLWidget 和 GLEW 包括

Custom QOpenGLWidget and GLEW include

抱歉,如果这是一个非常基本的问题,但我很困惑:
我正在使用 Visual Studio 并正在创建自定义 QOpenGLWidget class(通过从基础 class 继承),我的问题如下:

有人可以告诉我我在这里缺少什么吗?我猜想包括我只需要的东西 (#include <QOpenGLWidget>) 比 <QtWidgets> 中的一大堆东西要好,但为什么它会阻止我访问 glew.h 中定义的东西?

感谢任何帮助

您不能同时包含 Qt 的 OpenGL 包装器 大多数 OpenGL loading library headers。不同的 .cpp 文件可以包含不同的 headers,但相同的 .cpp 不能。因此,您必须选择要使用的内容:GLEW 或 Qt 的 OpenGL 包装器。

这不起作用的原因是加载程序通常使用包含保护来防止您意外包含 <GL/gl.h> 或类似的 headers。加载库往往是排他性的,因为它们通常定义与其他 OpenGL headers 相同的符号。如果他们没有阻止您这样做,如果您尝试将两者都包括在内,您可能会遇到 multiply-defined-symbol 错误。

Qt 的 OpenGL 包装器本身就是一个加载库。所以它执行相同的排除技巧,定义 GLEW 和其他加载程序将使用的包含保护。因此,您不能在同一个 .cpp 文件中同时使用两者。