c++ - 使用 Qt C++ 截屏

标签 c++ qt screenshot

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

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);

最佳答案

在启动时创建 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());

关于c++ - 使用 Qt C++ 截屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57233845/

相关文章:

postgresql - 无法查询 PostgreSQL 数据库

linux - Imagemagick 的导入速度慢得令人沮丧

c++ - 使用大括号和 : symbols 进行对象实例化

c++ - MPI : Percolate a subarray from slave processes to update main array in root/master process

c++ - 在宏中定义然后取消定义预处理器变量

c++ - vtk 6.x,Qt : 3D (line, 表面,散点图)绘图

c++ - QWidget调整大小问题

delphi - 过去的 DWM 屏幕捕获到 TBitmap

screenshot - 捕获用户浏览器屏幕截图以帮助报告错误的方法

c++ - 我该怎么做才能让我的代码寻找最少数量的硬币?