C++ 如何在QT中使用绘画事件(WM_Paint)截图
我正在尝试在QT中拍摄绘画事件(WM_Paint)的截图,但我不知道如何拍摄, 我用这段代码截图,但它不是真正的好做这件事 它必须做屏幕截图时,在桌面上的一些变化不采取截图每1000毫秒与定时器C++ 如何在QT中使用绘画事件(WM_Paint)截图,c++,qt,C++,Qt,我正在尝试在QT中拍摄绘画事件(WM_Paint)的截图,但我不知道如何拍摄, 我用这段代码截图,但它不是真正的好做这件事 它必须做屏幕截图时,在桌面上的一些变化不采取截图每1000毫秒与定时器 void MainWindow::shootScreen() { originalPixmap = QPixmap(); // clear image for low memory situations // on embedded
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));
}
在您感兴趣的小部件上使用,然后检查适当的事件。例如,在main窗口中
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);
}
坦克你Jon Harper你的密码很有用但我在那里做了些改变 当我的项目窗体上出现某个按键事件时,您的代码才起作用,但我在if中添加了paint方法,现在它也在windows事件上起作用
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == this && QEvent::Paint == event->type()) {
shootScreen();
}
return false;
}
您不能从UI上的控件发出您感兴趣的信号。例如,如果要在文本框中的文本更改时拍摄屏幕截图,或者图像控件中的图像更改时拍摄屏幕截图,只需创建一个自定义控件,并在控件内容更改时发出信号。然后从插槽中,捕获屏幕截图?如果你在画图中这样做,太多的场景会引发画图,因此不必要地截图。最简单的解决方案是在感兴趣的对象上安装事件过滤器。你截图的对象是什么?如果它是整个桌面,那么Qt中就没有跨平台的方式来监控它的更新;你必须仔细阅读在每个平台上是如何完成的。无论如何,无论Windows上屏幕的本机表示形式是什么,显然都不会得到绘制事件。请注意--将
return false
更改为return BaseClass::eventFilter(obj,event)
,否则您可能会破坏所属的任何类!在自己身上安装事件过滤器没有什么意义,只需覆盖event
。