C++ 拍摄特定窗口的屏幕截图-C++;/Qt
在Qt中,如何拍摄特定窗口的屏幕截图(例如,假设我有记事本,我想拍摄名为“Untitled-Notepad”的窗口截图)? 在他们的屏幕截图示例代码中,他们展示了如何拍摄整个桌面的屏幕截图:C++ 拍摄特定窗口的屏幕截图-C++;/Qt,c++,qt,screenshot,C++,Qt,Screenshot,在Qt中,如何拍摄特定窗口的屏幕截图(例如,假设我有记事本,我想拍摄名为“Untitled-Notepad”的窗口截图)? 在他们的屏幕截图示例代码中,他们展示了如何拍摄整个桌面的屏幕截图: originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId()); 如何在Qt中获取特定窗口的winId()(假设我知道该窗口的标题) 谢谢我很确定这是特定于平台的。WinID是Windows上的HWD,因此您可以在您给出的
originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
如何在Qt中获取特定窗口的winId()(假设我知道该窗口的标题)
谢谢我很确定这是特定于平台的。WinID是Windows上的HWD,因此您可以在您给出的示例中调用
FindWindow(NULL,“Untitled-Notepad”)
。还可以查看WindowFromPoint
和EnumChildWindows
。如果您有多个标题相同的窗口,后者可以让您提示用户消除歧义。查看QDesktopWidget类。它从QWidget继承而来,因此拍摄屏幕截图几乎没有问题:
QPixmap pm(QDesktopWidget::screenGeometry().size());
QDesktopWidget::screen().render(&pm); // pm now contains screenshot
尽管已经回答了这个问题,但为了完整起见,我将在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);
}
看看
简言之:
QScreen *screen = QGuiApplication::primaryScreen();
if (screen)
QPixmap originalPixmap = screen->grabWindow(0);
对于
4.8版
,我不得不对您的代码片段做一些修改。主要是:创建一个类型为QDesktopWidget
的对象来调用screenGeometry()
和screen()
,并将screen().render()
更改为screen()->render()
,因为screen()
返回一个QWidget*
。