捕获Qt小部件作为图像文件

时间:2009-10-15 04:40:38

标签: qt opengl jpeg

我正在使用QGLWidget(用于OpenGL的Qt小部件),并希望能够将小部件显示的屏幕捕获为JPEG文件。我怎样才能做到这一点?是否有一个函数可以将窗口小部件当前显示的内容作为图像返回?

5 个答案:

答案 0 :(得分:15)

通常使用OpenGL,您可以使用glReadPixels()函数从帧缓冲区读取。这会将帧缓冲内容放入已分配的缓冲区中。然后,您需要一个将其转换为JPEG的函数。

但是,当您使用QGLWidget时,可以使用其grabFrameBuffer()方法将帧缓冲区内容作为QImage对象获取。这可能是更好的方法。您可以获取帧缓冲内容,然后使用QImage::save()保存到文件中。

如果你转到Qt 5的QOpenGLWidget,你会发现它有类似的 grabFrameBuffer()方法。

答案 1 :(得分:9)

QImage img(mywidget.size());
QPainter painter(&img);
mywidget.render(&painter);
img.save("/some/file.jpg");

答案 2 :(得分:2)

以下是将小部件另存为图像的最简单方法,工作在Qt 5:

QString file = QFileDialog::getSaveFileName(this, "Save as...", "name", "PNG (*.png);; BMP (*.bmp);;TIFF (*.tiff *.tif);; JPEG (*.jpg *.jpeg)");
ui->myWidget->grab().save(file);

答案 3 :(得分:1)

为什么不使用非常简单的咒语QPixmap::grabWindow( m_widget->winId() ).save( "/some/file.jpg" )

答案 4 :(得分:-1)

QPixmap pixmap = QPixmap::grabWidget( &widget );
pixmap.save("widget.png");