【问题标题】:Taking Screenshot of Full Desktop with Qt5使用 Qt5 截取完整桌面的屏幕截图
【发布时间】:2014-06-13 21:20:15
【问题描述】:

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

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

QApplication a(argv, argc);

QScreen *screen = a.primaryScreen();

QPixmap screenshot = screen->grabWindow(0);

screenshot.save('screenshot.png', 'png');

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

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

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

【问题讨论】:

标签: c++ qt qt5 screenshot desktop


【解决方案1】:

我想出了一个解决这个问题的简单方法。最近在翻文档的时候,发现getWindow方法的默认参数是

(x = 0, y = 0, width = -1, height = -1)

因此,无论我用什么屏幕调用 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());

【讨论】:

  • 这实际上不适用于多显示器设置。如果您通过调用QApplication::desktopWidget()-&gt;screen() 获得Screen,它只会返回您的主显示器。
猜你喜欢
  • 2017-05-10
  • 2021-02-09
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多