QGLWidget :: makecurrent():GetDC()失败。窗口句柄无效

时间:2010-05-14 13:15:33

标签: qt opengl

我要求将图片保存在屏幕外。我已经使用QGLwidget :: grabframebuffer来完成这项工作。虽然它在MAC上工作正常,但在Windows 7上失败并显示错误“QGLWidget :: makecurrent():GetDC()失败。无效的窗口句柄”。在此过程中只创建了一个opengl上下文。但我观察到,如果我将QGLWidget添加到Mainwindow,我可以保存图片。我不需要在MAC上做这个来获取图片。 我不确定会出现什么问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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