2014-06-13 52 views
3

我想到了如何从Qt5中获取桌面的屏幕截图,其中包含获取主屏幕的示例,并抓取并保存它。以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 

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

+1

看起来像一个Qt错误。如果您仍然可以在Qt 5.3上重现,请提交一份大报告。 –

+0

[示例](http://doc.qt.io/qt-5/qtwidgets-desktop-screenshot-example.html)。 – handle

回答

4

我想出了一个解决这个问题的简单方法。当我一直在寻找通过文档最近,我发现“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());