如何使用Qt捕获当前屏幕图像?

时间:2018-04-04 04:13:39

标签: qt

我的自定义QDialog中有一个按钮,当点击按钮1时我发出信号

void MyCustomDialog::on_pushButton_1()
{
    this->hide(); //i need to hide this window before 'OnButton_1_Clicked' stuffs starts
    emit button_1_clicked();
}

在我的主窗口中,我连接了插槽并创建了如下所示的实例

void MainWindow::MainWindow()
{

    MyCustomDialog *dlg = MyCustomDialog::getInstance(this); //only single instance created
    connect(dlg, &MyCustomDialog::button_1_clicked, this, &MainWindow::OnButton_1_Clicked);
}

我正在从主窗口中的一个函数显示我的自定义对话框,如下所示

void MainWindow::dispayCustomDialog()
{
    MyCustomDialog *dlg = MyCustomDialog::getInstance();
    dlg->show();
}

下面显示了我的' OnButton_1_Clicked'插槽。我正在使用下面的行

捕获屏幕截图
void MainWindow::OnButton_1_Clicked()
{
     //capture the screen shot
     QScreen *screen = QGuiApplication::primaryScreen();
     QPixmap *map = new QPixmap(screen->grabWindow(0));
     bool result = map->save("D:/test.jpg", "JPG");
}

一旦我使用上述功能捕获屏幕,我仍然可以看到我的“我的自定义对话”'在test.jpg文件中。 Qt doc说QGuiApplication::primaryScreen捕获了初始应用状态。所以我认为,这是我的预期。我们是否有其他解决方案来获取当前状态的屏幕?

我想要实现的是在隐藏我的' MyCustomDialog'后,在OnButton_1_Clicked()函数中抓取屏幕。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。在捕获屏幕之前使用延迟为500毫秒的单个时间计时器,如下所示。这等待我的自定义对话框正确隐藏。

void MainWindow::OnButton_1_Clicked()
{
     QTimer::singleShot(500, this, &MainWindow::shootscreen);
}

void MainWindow::shootscreen()
{
     //capture the screen shot
     QScreen *screen = QGuiApplication::primaryScreen();
     QPixmap map = screen->grabWindow(0);
     bool result = map.save("D:/test.jpg", "JPG");
}