我试图在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));
}
答案 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)
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == this && QEvent::Paint == event->type()) {
shootScreen();
}
return false;
}