如何在QT中使用Paint事件(WM_Paint)截取屏幕截图

时间:2016-07-01 04:40:15

标签: c++ qt

我试图在QT中使用Paint事件(WM_Paint)事件截取屏幕截图,但我不知道如何, 我使用这段代码来截取屏幕截图,但这样做并不是很好 当桌面上的某些更改没有使用计时器每隔1000毫秒进行截屏时,它必须进行屏幕截图

     void MainWindow::shootScreen()
 {
 originalPixmap = QPixmap(); // clear image for low memory situations
                             // on embedded devices.

 originalPixmap = QPixmap::grabWindow(QApplication::desktop()->winId());

 //emit getScreen(originalPixmap);

 updateScreenshotLabel();

 }

 void MainWindow::updateScreenshotLabel()
 {
     this->ui->label_2->setPixmap(originalPixmap.scaled(this->ui->label_2-    >size(),
                                                  Qt::KeepAspectRatio,
                                                  Qt::SmoothTransformation));
 }

2 个答案:

答案 0 :(得分:0)

在您感兴趣的小部件上使用QObject::installEventFilter,然后检查正确的事件。例如,在MainWindow ui初始化中:

void MainWindow::yourUiInitFunc()
{
    exampleWidget = new QWidget;
    ...
    exampleWidget->installEventFilter(this);
    ...
}

然后重新实施eventFilter

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == exampleWidget && event->type() == QEvent::KeyPress)
        shootScreen();
    return QMainWindow::eventFilter(obj, event);
}

答案 1 :(得分:0)

坦克你乔恩哈珀你的代码是有用的,但我改变了那里的东西 你的代码只是在我的项目表单上的某个按键事件时工作,但是我为你的if添加了paint方法,现在它也适用于windows事件

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{

    if (obj == this && QEvent::Paint == event->type()) {
        shootScreen();
    }

    return false;
}