Qt OpenGL 错误“_imp_gl...”

Qt OpenGL error '_imp_gl...'

试图学习如何使用 QGLWidget,但已经浪费了很多时间来处理这些错误。我什至不明白他们。我用谷歌搜索,但没有。请问有什么建议吗?

代码: https://gist.github.com/anonymous/77c57fde631c77810775

In function `ZN6Widget12initializeGLEv':
 undefined reference to `_imp__glEnable@4'
 undefined reference to `_imp__glShadeModel@4'
 and more...

您没有link反对任何 GL 库。

从 Qt 5.5 开始,在 Windows 上,默认情况下,Qt 不会 link 反对 libGL,但有一个运行时机制来决定加载libGL 或 ANGLE(取决于您的 OS 能力)。这意味着您不能只使用 glFoo——您会得到 linking 错误。


解决方案:通过函数解析器,例如QOpenGLFunctions:

QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
f->glEnable(GL_FOOBAR);
f->glDrawArrays(...);

请注意,在 Windows 上,您无论如何都需要函数解析器才能使用 1.1 之后引入的任何 OpenGL 函数。

此外,如果您使用的是纯 ES2 或桌面 GL-only 函数,您应该强制 Qt 加载正确的 GL 实现:

int main(int argc, char **argv) {
    // *before* creating it
    QApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
    QApplication app(argc, argv); 

More info here.

(更激进的解决方案:通过-opengl desktop-opengl es2重新编译Qt进行配置)。