1. 拼接多个显示器上的图像
QPixmap MainWindow::grabWindow1() { QList<QScreen*> screens = QGuiApplication::screens(); QList<QPixmap> scrs; int w = 0, h = 0, p = 0; for (QScreen *scr: screens) { QRect g = scr->geometry(); QPixmap pix = scr->grabWindow(0, g.x(), g.y(), g.width(), g.height()); w += pix.width(); if (pix.height() > h) { h = pix.height(); } scrs.append(pix); } QPixmap retpix(w, h); QPainter painter(&retpix); retpix.fill(Qt::white); for (QPixmap &scr: scrs) { painter.drawPixmap(QPoint(p, 0), scr); p += scr.width(); } return retpix; }
2.在主屏幕用虚拟屏幕的尺寸截图
QPixmap MainWindow::grabWindow2() { QScreen *screen = QGuiApplication::primaryScreen(); QRect scg = screen->virtualGeometry(); QPixmap retpix = screen->grabWindow(QApplication::desktop()->winId(), scg.x(), scg.y(), scg.width(), scg.height()); return retpix; }
两种方式效果相同:
QPixmap pix1 = this->grabWindow1(); QPixmap pix2 = this->grabWindow2(); pix1.save("D:/1.png"); pix2.save("D:/2.png");
c++ - Screenshot capture of dual monitor in Qt 5 - Stack Overflow
文章评论