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() 时引发读取访问冲突异常

使用桌面 OpenGL 构建 Qt 时出错

在win7下为opengl窗口捕获的图像是黑色的

带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?

如何使用带有 OpenGL ES 的 android 相机工作?