“QGLContext::makeCurrent() : wglMakeCurrent failed: The operation completed successfully” 是啥意思?

Posted

技术标签:

【中文标题】“QGLContext::makeCurrent() : wglMakeCurrent failed: The operation completed successfully” 是啥意思?【英文标题】:what does "QGLContext::makeCurrent() : wglMakeCurrent failed: The operation completed successfully" mean?“QGLContext::makeCurrent() : wglMakeCurrent failed: The operation completed successfully” 是什么意思? 【发布时间】:2012-03-05 09:43:40 【问题描述】:

我正在尝试制作一个使用 QGLWidgets 的多线程 Qt 应用程序,但我不断收到此错误。(我正在尝试使用 QPainter 从另一个线程进行绘制)

而且看起来我也因此出现了巨大的内存泄漏。

错误是“QGLContext::makeCurrent() : wglMakeCurrent failed: The operation completed successfully”

【问题讨论】:

【参考方案1】:

我相信这与 Qt 邮件列表中的一个相当老的问题有关,如 here 所述。简而言之,如果调用 makeCurrent() 的线程不等于检索设备上下文的线程,则调用 GetDC()。如链接线程中所述,问题在于没有相应地调用 ReleaseDC(),导致句柄泄漏,并在某些时候触发 Windows 在对 GetDC() 的调用中返回 NULL,这使得 wglMakeCurrent() 失败。但是,我不知道为什么在这种情况下 GetLastError() 声称“操作已成功完成”。

【讨论】:

以上是关于“QGLContext::makeCurrent() : wglMakeCurrent failed: The operation completed successfully” 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章