试图学习如何使用QGLWidget,但已经浪费了很多时间来处理这些错误。我什至不明白他们。我用谷歌搜索,但什么都没有。请问,有什么建议吗?
法典:https://gist.github.com/anonymous/77c57fde631c77810775
In function `ZN6Widget12initializeGLEv':
undefined reference to `_imp__glEnable@4'
undefined reference to `_imp__glShadeModel@4'
and more...
您没有链接到任何 GL 库。
从Qt 5.5开始,在Windows上,默认情况下,Qt不链接到libGL,但有一个运行时机制来决定加载libGL或ANGLE(取决于你的操作系统功能)。这意味着你不能只使用glFoo
- 你会得到链接错误。
解决方案:通过函数解析器,例如QOpenGLFunctions
:
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
f->glEnable(GL_FOOBAR);
f->glDrawArrays(...);
请注意,在Windows上,无论如何都需要函数解析器才能使用1.1之后引入的任何OpenGL函数。
此外,如果您使用的是仅 ES2 或仅桌面 GL 函数,则应强制 Qt 加载正确的 GL 实现:
int main(int argc, char **argv) {
// *before* creating it
QApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
QApplication app(argc, argv);
更多信息在这里。
(更激进的解决方案:重新编译Qt传递-opengl desktop
或-opengl es2
进行配置)。