我有一个Qt程序,可以将我的数据可视化为体素网格(请参见下图)。但是我只想运行一次Qt程序,以便显示数据,截屏然后退出整个程序。
这是我的代码:
https
在上面的示例中,int main(int argc, char** argv) {
QApplication app(argc, argv);
Mainframe frame(voxelGrid);
frame.show();
app.exec();
frame.saveScreenshot();
return 0;
}
是继承自Mainframe
的类。
但是似乎我需要调用QMainWindow
,否则app.exec
函数将仅存储黑色图像。 saveScreenshot
但是会导致无限循环,在程序继续保存屏幕截图之前,我需要手动关闭窗口。知道如何解决这个问题吗?
使用Qt的屏幕截图功能:
app.exec
其中 QImage img = ui.mViewport->grabFrameBuffer();
img.save("screenshot.png");
QApplication::clipboard()->setImage(img);
是从mViewport
继承的类。
整个Qt-Window如下所示:
答案 0 :(得分:0)
我以Qt grabber为例获取屏幕截图:
#include "glwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
GLWidget w;
w.renderPixmap(w.width(), w.height()).save("screenshot.png");
return 0;
}
只需使用QGLWidget :: renderPixmap渲染框架。
该函数在内部渲染到一个帧缓冲对象中并执行 像素回读。
答案 1 :(得分:0)
所以解决方案如下:
int main(int argc, char** argv) {
QApplication app(argc, argv);
Mainframe frame(voxelGrid);
frame.show();
Viewport* widget;
widget = frame.ui.mViewport;
widget->show();
QApplication::processEvents();
QApplication::processEvents();
widget->updateGL();
frame.saveScreenshot();
return 0;
}
因此,显然我必须获得指向mViewport(QGLWidget)的指针,然后调用
QApplication::processEvents();
2次(!)(由于任何原因一次都不够)。最终,对mViewport widget->updateGL();
进行了自定义的绘制方法,然后frame.saveScreenshot();
开始起作用。
不确定我的问题是否归因于Qt或mViewport对象的细节。在后一种情况下,我的问题可能对他人无济于事。抱歉;)