使用 Qt5 截取完整桌面

Dav*_*wig 3 c++ desktop qt screenshot qt5

我想出了如何使用 Qt5 从包含的示例中获取今天的桌面屏幕截图,该示例获取主屏幕,抓取它,然后保存它。

我在没有测试的情况下从 Python 翻译代码,所以如果有一个小的语法错误,那么是的,你知道。因此,我可以使用以下命令轻松截取主屏幕的屏幕截图:

QApplication a(argv, argc);

QScreen *screen = a.primaryScreen();

QPixmap screenshot = screen->grabWindow(0);

screenshot.save('screenshot.png', 'png');
Run Code Online (Sandbox Code Playgroud)

这将(显然)截取主监视器的屏幕截图。问题是我需要截取所有显示器的屏幕截图。所以我想出了这个:

QList<QScreen*> screens = a.screens();
QScreen *screen;
QPixmap screenshot;

for(int i = 0; i < screens.length(); i++){
    screen = screens.at(i);
    screenshot = screen->grabWindow(0);
    screenshot.save(QString::number(i) + ".png", 'png');
}
//takes and saves two screenshots on my end
Run Code Online (Sandbox Code Playgroud)

这找到了我的两个显示器,但保存的图像都是主显示器的屏幕截图,我不知道如何获得其他显示器。我已经玩了几个小时了,但仍然无法弄清楚。所以有人可以帮我吗?

Dav*_*wig 5

我想出了一个解决这个问题的简单方法。最近在查看文档时,我发现“getWindow”方法的默认参数为

(x = 0, y = 0, width = -1, height = -1)
Run Code Online (Sandbox Code Playgroud)

因此,无论我用什么屏幕调用 getWindow 方法,它都会给我相同的几何形状。所以要解决这个问题,很简单:

//Screen geometry
QRect g = screen->geometry();

//Take the screenshot using the geometry of the screen
QPixmap screenShot = screen->grabWindow(0, g.x(), g.y(), g.width(), g.height());
Run Code Online (Sandbox Code Playgroud)