首页 > 解决方案 > 用于绘制数据的 Qt:截取窗口然后关闭窗口

问题描述

我有一个 Qt 程序可以将我的数据可视化为体素网格(见下图)。但是我只想运行一次 Qt 程序,以便显示数据,截屏然后退出整个程序。

这是我的代码:

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函数将只存储黑色图像。app.exec但是会导致无限循环,我需要在程序继续保存屏幕截图之前手动关闭窗口。知道如何解决这个问题吗?

这是我正在绘制的数据: 在此处输入图像描述

使用 Qt 的截图功能:

  QImage img = ui.mViewport->grabFrameBuffer();
  img.save("screenshot.png");
  QApplication::clipboard()->setImage(img);

mViewport继承自的类在哪里QGLWidget
整个 Qt-Window 看起来像这样: 在此处输入图像描述

标签: qt

解决方案


我使用 Qt抓取器示例截取屏幕截图:

#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 来渲染框架。

该函数在内部渲染为帧缓冲区对象并执行像素回读。


推荐阅读