自定义 QOpenGLWidget 和 GLEW 包括
Custom QOpenGLWidget and GLEW include
抱歉,如果这是一个非常基本的问题,但我很困惑:
我正在使用 Visual Studio 并正在创建自定义 QOpenGLWidget
class(通过从基础 class 继承),我的问题如下:
- 如果我在自定义 class 中添加
#include <QOpenGLWidget>
,并为 glew.h
添加 #include
,我可以访问 glew.h
中定义的内容
- 但是如果我在我的自定义 class 中添加
#include <QtWidgets>
(我也会覆盖 QOpenGLWidget
),那么我无法访问 [=13= 中定义的内容] 并且我看到 "identifier not defined" 个错误(例如 glGenVertexArrays
)
有人可以告诉我我在这里缺少什么吗?我猜想包括我只需要的东西 (#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 文件中同时使用两者。
抱歉,如果这是一个非常基本的问题,但我很困惑:
我正在使用 Visual Studio 并正在创建自定义 QOpenGLWidget
class(通过从基础 class 继承),我的问题如下:
- 如果我在自定义 class 中添加
#include <QOpenGLWidget>
,并为glew.h
添加#include
,我可以访问glew.h
中定义的内容 - 但是如果我在我的自定义 class 中添加
#include <QtWidgets>
(我也会覆盖QOpenGLWidget
),那么我无法访问 [=13= 中定义的内容] 并且我看到 "identifier not defined" 个错误(例如glGenVertexArrays
)
有人可以告诉我我在这里缺少什么吗?我猜想包括我只需要的东西 (#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 文件中同时使用两者。