错误:QOpenGLShader:无法创建着色器 - 使用Qt5.2编译QtQuick应用程序时Mingw OpenGL

Mos*_*osi 6 opengl qt qml qt-quick qt5

我已经下载并安装了"Qt 5.2 mingw(opengl和x86)"版本.当我用这个版本的Qt运行Qt项目时,没有问题.但是当我运行Qt Quick应用程序时,程序崩溃并跟随消息登录调试:

getProcAddress: Unable to resolve 'glGenRenderbuffers'
getProcAddress: Unable to resolve 'glGenRenderbuffersOES'
getProcAddress: Unable to resolve 'glGenRenderbuffersARB'
getProcAddress: Unable to resolve 'glGenRenderbuffersEXT'
getProcAddress: Unable to resolve 'glBindRenderbuffer'
getProcAddress: Unable to resolve 'glBindRenderbufferOES'
getProcAddress: Unable to resolve 'glBindRenderbufferARB'
getProcAddress: Unable to resolve 'glBindRenderbufferEXT'
getProcAddress: Unable to resolve 'glRenderbufferStorage'
getProcAddress: Unable to resolve 'glRenderbufferStorageOES'
getProcAddress: Unable to resolve 'glRenderbufferStorageARB'
getProcAddress: Unable to resolve 'glRenderbufferStorageEXT'
getProcAddress: Unable to resolve 'glGenRenderbuffers'
getProcAddress: Unable to resolve 'glGenRenderbuffersOES'
getProcAddress: Unable to resolve 'glGenRenderbuffersARB'
getProcAddress: Unable to resolve 'glGenRenderbuffersEXT'
getProcAddress: Unable to resolve 'glBindRenderbuffer'
getProcAddress: Unable to resolve 'glBindRenderbufferOES'
getProcAddress: Unable to resolve 'glBindRenderbufferARB'
getProcAddress: Unable to resolve 'glBindRenderbufferEXT'
getProcAddress: Unable to resolve 'glRenderbufferStorage'
getProcAddress: Unable to resolve 'glRenderbufferStorageOES'
getProcAddress: Unable to resolve 'glRenderbufferStorageARB'
getProcAddress: Unable to resolve 'glRenderbufferStorageEXT'
getProcAddress: Unable to resolve 'glFramebufferRenderbuffer'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferOES'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferARB'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferEXT'
getProcAddress: Unable to resolve 'glFramebufferRenderbuffer'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferOES'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferARB'
getProcAddress: Unable to resolve 'glFramebufferRenderbufferEXT'
getProcAddress: Unable to resolve 'glGenBuffers'
getProcAddress: Unable to resolve 'glGenBuffersOES'
getProcAddress: Unable to resolve 'glGenBuffersARB'
getProcAddress: Unable to resolve 'glGenBuffersEXT'
getProcAddress: Unable to resolve 'glBindBuffer'
getProcAddress: Unable to resolve 'glBindBufferOES'
getProcAddress: Unable to resolve 'glBindBufferARB'
getProcAddress: Unable to resolve 'glBindBufferEXT'
getProcAddress: Unable to resolve 'glBufferData'
getProcAddress: Unable to resolve 'glBufferDataOES'
getProcAddress: Unable to resolve 'glBufferDataARB'
getProcAddress: Unable to resolve 'glBufferDataEXT'
getProcAddress: Unable to resolve 'glBindBuffer'
getProcAddress: Unable to resolve 'glBindBufferOES'
getProcAddress: Unable to resolve 'glBindBufferARB'
getProcAddress: Unable to resolve 'glBindBufferEXT'
getProcAddress: Unable to resolve 'glBindBuffer'
getProcAddress: Unable to resolve 'glBindBufferOES'
getProcAddress: Unable to resolve 'glBindBufferARB'
getProcAddress: Unable to resolve 'glBindBufferEXT'
getProcAddress: Unable to resolve 'glCreateProgram'
getProcAddress: Unable to resolve 'glCreateProgramARB'
getProcAddress: Unable to resolve 'glCreateProgramObject'
getProcAddress: Unable to resolve 'glCreateProgramObjectARB'
QOpenGLShaderProgram: could not create shader program 
getProcAddress: Unable to resolve 'glCreateShader'
getProcAddress: Unable to resolve 'glCreateShaderARB'
getProcAddress: Unable to resolve 'glCreateShaderObject'
getProcAddress: Unable to resolve 'glCreateShaderObjectARB'
QOpenGLShader: could not create shader 
Renderer failed shader compilation: 
"" 
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?这个问题与我的显卡有关吗?

koo*_*jah 10

当您的图形卡驱动程序不支持Qt.Quick应用程序必需的OpenGL 2.0时会发生这种情况.

第一个解决方案是升级您的显卡驱动程序.您还可以使用OpenGL扩展查看器来验证您支持的OpenGL版本.

另一方面,如果您希望能够将应用程序部署到其他Windows安装,并且不希望要求用户更新其驱动程序,那么您不应该使用基于OpenGL的Qt5构建,而应该使用基于ANGLE的构建.遗憾的是,从Qt 5.1开始,Qt团队停止发布带有ANGLE和mingw的Qt版本.因此,您需要自己重新编译Qt或使用基于其他编译器的版本.

有关Qt5和Windows以及ANGLE/OpenGL的更多信息,请访问此处

编辑Qt5.3

Qt 5.3一个QQuickWindow名为sceneGraphError的新信号上添加了一个信号,它允许你知道初始化失败而不是只是得到一个空白屏幕.

此外,Qt团队正致力于首先在客户端计算机上尝试OpenGL,如果它无法回退到ANGLE.这仍然是实验性的Qt 5.3,应该是Qt 5.4发布的一部分.