我的自定义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()函数中抓取屏幕。
答案 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");
}