Qt5.5下捕获一个带有OpenGL内容的Widget
Posted
技术标签:
【中文标题】Qt5.5下捕获一个带有OpenGL内容的Widget【英文标题】:Capture a Widget with OpenGL content under Qt5.5 【发布时间】:2017-01-11 08:53:10 【问题描述】:我需要捕获带有 OpenGL 内容的小部件的屏幕截图(使用 Qt5.5 下的 SoQt 1.5.0 类),并将其保存到 QImage。到目前为止我尝试过的是:
使用 QGLWidget 类中的 grabFrameBuffer(这似乎是 自 Qt5 起已过时):它会导致黑色区域 使用 QOpenGLWidget 类中的 grabFramebuffer:捕获甚至不起作用,并且没有专门的区域 使用 QGLWidget 中的 renderPixmap 类:它会产生一个白色区域问题似乎出在这个 if 条件下(在 Qt4.8 下使用了 QGLWidget::grabFrameBuffer(),我们正在尝试迁移到 Qt5.5):
if(dynamic_cast<QGLWidget*>(rendererCourant->getNormalWidget()))
((QGLWidget*)rendererCourant->getNormalWidget())->updateGL();
_image = ((QGLWidget*)(rendererCourant->getNormalWidget()))->grabFrameBuffer();
有人对此事有提示吗?
【问题讨论】:
【参考方案1】:您可以做的一件事是调用:
auto fb = QOpenGLWidget->defaultFramebufferObject();
这应该是 QOpenGLWidget 将要绘制到的帧缓冲区,然后您使用 OpenGL 来获取您需要的内容。
【讨论】:
以上是关于Qt5.5下捕获一个带有OpenGL内容的Widget的主要内容,如果未能解决你的问题,请参考以下文章
Qt 5.5 QOpenGLWidget链接错误未链接任何openGL调用
Qt 5.5 和 OpenGL:尝试调用 paintGL() 时引发读取访问冲突异常