首页 > 解决方案 > 使用 Qt C++ 截屏

问题描述

我正在尝试用我的应用程序截取屏幕截图。但我收到以下错误消息:

QPixmap: Must construct a QGuiApplication before a QPixmap

我的程序在后台运行,我不需要 GUI。我将如何创建一个“QGuiApplication”然后永久隐藏窗口?还是有另一种无需创建 GUI 即可截取屏幕截图的方法?

我正在使用以下代码截取屏幕截图:

QScreen *screen;
QPixmap qpx_pixmap;

screen = QGuiApplication::primaryScreen();
qpx_pixmap = screen->grabWindow(0);
screenshotTarget = dir.path() + "/" + QDateTime::currentDateTime().toString("dddd hh:mm:ss");
qpx_pixmap.save(screenshotTarget);

标签: c++qtscreenshot

解决方案


QGuiApplication在创建. _ _ QPixmap您不需要还创建 GUI。QGuiApplication它本身不会创建任何窗口或任何可见的东西。

一个好的地方是在开始main()

int main(int argc, char* argv[])
{
    QGuiApplication app(argc, argv);

    // ...

它也适用于QApplication,因为它继承自QGuiApplication。它只是提供了创建基于对象所需的额外东西QWidget,而您不需要这些东西。重要的是QGuiApplication对象是QPixmap.

最后,您需要告诉grabWindow()要抓取哪个部分。要抓取整个屏幕,请使用:

auto geom = screen->geometry();
qpx_pixmap = screen->grabWindow(0, geom.x(), geom.y(), geom.width(), geom.height());

推荐阅读