【问题标题】:QGLWidget::makecurrent(): GetDC() failed. Invalid Window handleQGLWidget::makecurrent(): GetDC() 失败。无效的窗口句柄
【发布时间】:2011-03-28 18:28:38
【问题描述】:

我需要屏幕外保存图片。我已经使用 QGLwidget::grabframebuffer 来完成这项工作。虽然它在 MAC 上运行良好,但在 Windows 7 上失败并显示错误“QGLWidget::makecurrent(): GetDC() failed. Invalid Window handle”。在此过程中只创建了一个 opengl 上下文。但我观察到,如果我将 QGLWidget 添加到主窗口,我可以保存图片。我不需要在 MAC 上执行此操作来获取图片。 我不确定可能出了什么问题。

谢谢!!

【问题讨论】:

    标签: qt opengl


    【解决方案1】:

    这是因为在 MacOS 上,OpenGL 上下文始终附加到多窗口应用程序的根窗口。 (这在 Cocoa 中看不到,但在 Agl/Cgl 中是可见的) 在 Windows 上,您可以使用任何窗口(具有标志弹出窗口、子窗口和我忘记的另一个窗口)创建上下文,然后使用 MakeCurrent 将其绑定到任何窗口。要期望它正常工作,您只需要确保整个应用程序中只有一个线程和一个上下文。规范另有说明,但实际上它永远不会起作用。 (虽然你可能在一个小应用程序中看不到它,只是看到罕见的随机崩溃)

    另外,我不知道 QT 中帧缓冲区的捕获是如何工作的,使用 readpixels 还是使用可怕的 GDI 复制 hack,如果它是最新的,那么它不起作用是正常的,它只能是在屏幕表面上完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多