在Qt中,我如何截取特定窗口的截图(即假设我有记事本,我想截取标题为“无标题 - 记事本”的窗口的屏幕截图)? 在他们的截图示例代码中,他们展示了如何截取整个桌面的截图:
originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
如何在Qt中获取特定窗口的winId()(假设我知道窗口的标题)?
由于
答案 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)
简而言之:
QScreen *screen = QGuiApplication::primaryScreen();
if (screen)
QPixmap originalPixmap = screen->grabWindow(0);
答案 4 :(得分:1)
另请查看WindowFromPoint
和EnumChildWindows
。后者可以允许您提示用户消除歧义,如果您有多个具有相同标题的窗口。
答案 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);
}