在将QGLWidget的内容保存为图像时,不会保存窗口小部件中的文本

时间:2012-01-06 07:05:40

标签: qt opengl

在我的QGLWidet中,我使用方法renderText()绘制一些文本。然后,我想将小部件的内容保存为图像。但是,事实证明,renderText()绘制的文本没有保存。

void MyGLWidget::paintGL()
{
    qglClearColor(Qt::white);
    glViewport(0,0, width(), height());
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);

    glBegin(GL_LINES);
    glVertex2f(0,0);
    glVertex2f(width(), height());
    glEnd();

    renderText(50, 50,  "Hello");
    glColor3f(0.0,1.0,0.0);
    renderText(50, 150, "World");
}

以下是保存图片的代码:

void MyGLWidget::saveImage()
{
    QGLPixelBuffer pbuffer(width(), height());
    pbuffer.makeCurrent();
    paintGL();
    QImage image = pbuffer.toImage();
    image.save("test_image.tif","tif");
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在调试Qt 4.8.0的源代码后,我发现了一些不起作用的原因。

  1. renderText使用GLWidget的宽度和宽度。高度而不是QGLPixelBuffer(因为你的截图和小部件大小相同,不是你的情况的问题)
  2. 它在QGLWidget上构造一个QPainter来呈现文本
  3. 不幸的是,看起来renderText与QGLPixelBuffers

    完全不兼容