截取特定窗口的截图 - C ++ / Qt

时间:2009-11-21 01:43:05

标签: c++ qt screenshot

在Qt中,我如何截取特定窗口的截图(即假设我有记事本,我想截取标题为“无标题 - 记事本”的窗口的屏幕截图)? 在他们的截图示例代码中,他们展示了如何截取整个桌面的截图:

originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());

如何在Qt中获取特定窗口的winId()(假设我知道窗口的标题)?

由于

6 个答案:

答案 0 :(得分:4)

我很确定这是特定于平台的。 winIds是Windows上的HWND,因此您可以在您给出的示例中调用FindWindow(NULL, "Untitled - Notepad")

答案 1 :(得分:2)

对于你“截取特定窗口的截图”的方式是:

/*------ Take a screenshot of a window ------*/
// window is a: QWidget *window;
originalPixmap = QPixmap::grabWidget(window); 

答案 2 :(得分:2)

查看QDesktopWidget类。它继承自QWidget,因此截取屏幕确实没有问题:

QPixmap pm(QDesktopWidget::screenGeometry().size());
QDesktopWidget::screen().render(&pm); // pm now contains screenshot

答案 3 :(得分:2)

查看Screenshot example

简而言之:

QScreen *screen = QGuiApplication::primaryScreen();
if (screen)
    QPixmap originalPixmap = screen->grabWindow(0);

答案 4 :(得分:1)

另请查看WindowFromPointEnumChildWindows。后者可以允许您提示用户消除歧义,如果您有多个具有相同标题的窗口。

答案 5 :(得分:-1)

虽然已经回答了这个问题,但为了完整起见,我将添加Trevor Boyd Smith的帖子(见上文)代码片段示例:

void MainWindow::on_myButton_GUI_Screeshot_clicked()
{
    QPixmap qPixMap = QPixmap::grabWidget(this);  // *this* is window pointer, the snippet     is in the mainwindow.cpp file

    QImage qImage = qPixMap.toImage();

    cv::Mat GUI_SCREENSHOT = cv::Mat(         qImage.height(),
                                              qImage.width(), CV_8UC4,
                                      (uchar*)qImage.bits(),
                                              qImage.bytesPerLine()  );

    cv::imshow("GUI_SCREENSHOT",GUI_SCREENSHOT);
}