Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 拍摄特定窗口的屏幕截图-C++;/Qt_C++_Qt_Screenshot - Fatal编程技术网

C++ 拍摄特定窗口的屏幕截图-C++;/Qt

C++ 拍摄特定窗口的屏幕截图-C++;/Qt,c++,qt,screenshot,C++,Qt,Screenshot,在Qt中,如何拍摄特定窗口的屏幕截图(例如,假设我有记事本,我想拍摄名为“Untitled-Notepad”的窗口截图)? 在他们的屏幕截图示例代码中,他们展示了如何拍摄整个桌面的屏幕截图: originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId()); 如何在Qt中获取特定窗口的winId()(假设我知道该窗口的标题) 谢谢我很确定这是特定于平台的。WinID是Windows上的HWD,因此您可以在您给出的

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

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*