我尝试编译简单的Qt应用程序并将其移植到Qt5在配置文件中,我包含了opengl标志:
QT += opengl widgets
还包括opengl Qt5路径:
................QtQt5.0.15.0.1msvc2010includeQtOpenGL
但是当我编译应用程序时我得到了这些编译错误
1>qmpwidget.cpp(148): error C3861: 'glClearDepth': identifier not found
1>qmpwidget.cpp(159): error C3861: 'glLoadIdentity': identifier not found
1>qmpwidget.cpp(167): error C2065: 'GL_QUADS' : undeclared identifier
1>qmpwidget.cpp(167): error C3861: 'glBegin': identifier not found
1>qmpwidget.cpp(168): error C3861: 'glTexCoord2f': identifier not found
1>qmpwidget.cpp(168): error C3861: 'glVertex2f': identifier not found
1>qmpwidget.cpp(169): error C3861: 'glTexCoord2f': identifier not found
1>qmpwidget.cpp(169): error C3861: 'glVertex2f': identifier not found
1>qmpwidget.cpp(170): error C3861: 'glTexCoord2f': identifier not found
1>qmpwidget.cpp(170): error C3861: 'glVertex2f': identifier not found
1>qmpwidget.cpp(171): error C3861: 'glTexCoord2f': identifier not found
1>qmpwidget.cpp(171): error C3861: 'glVertex2f': identifier not found
1>qmpwidget.cpp(172): error C3861: 'glEnd': identifier not found
其他opengl命令不识别
在.pro文件中添加此单词:
LIBS+=-lopengl32 -lglu32
如果你想使用旧的OpenGL API,你必须添加
#include <GL/gl.h>
并将您的应用程序链接到本机平台的opengl库(请参阅QtCreator .pro文件文档进行此操作)。
QT 5新的(更好的)方法是使用QOpenGLFunctions。QOpenGLWidget通过
提供对OpenGL函数的跨平台访问context()->functions()->glxxxx.
但是并不是所有的遗留函数都提供了:只有OpenGL 1的公共子集。x和es2.0。你必须以一种现代的方式重写你的OpenGL代码(顶点缓冲,着色器,…)。
你也可以使用更高的OpenGL配置文件与QOpenGLFunctions_X_X_profile包括文件,如:
#include <QOpenGLFunctions_4_3_core>
要使用这个更高版本的OpenGL,你还需要为你的QOpenGLWidget提供一个兼容的QSurfaceFormat。
添加到LinWM的答案,使用CMake,它将是这样的:
# ...
find_package(OpenGL REQUIRED)
find_package(Qt5 REQUIRED Widgets)
# ...
target_link_libraries(${CMAKE_PROJECT_NAME}
general Qt5::Widgets ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)
然后在source中:
#include <GL/glu.h>
这帮助我解决了Windows 10中gluPerspective()
和glFrustum()
函数的问题。
是否正确包含GL/gl.h
?
glClearDepth
有点惊讶,但所有其他功能和令牌已经从OpenGL-3和以后的版本中删除,Qt5不使用它们。