qt - 每次需要重新绘制时,如何在像素图中抓取 qwidget/render?

标签 qt

我有一个不想在屏幕上显示的 QWidget。相反,我想在每次重新绘制小部件时获取它的像素图,以便将其发送到我正在处理的应用程序的另一部分。 API 提供了两种方法: QPixmap::grabWidgetQWidget::render

问题是这两种方法都会触发一个新的 paintEvent小部件,创建小部件的递归重绘,因此不应在 paintEvent 中使用它们方法。

那么我怎么能在每次重新绘制小部件时获得一个代表小部件的像素图呢?

最佳答案

作为另一种方式 - 你可以做下一个检查:

void paintEvent(QPaintEvent*)
{
  QPainter painter(this);
  // If painter redirection was turned on, the painter will *not* paint on `this`!
  // Painting code
  //...
  if ( this == qobject_cast< QWidget * >( painter.device() ) )
  {
    // Do grabbing
  }
}

为在小部件上绘画和抓取时调用paintEvent。 painter->device()将不返回空值,而是返回 QWidget * 的实例仅当当前绘画在小部件上时才对象。如果画在QPixmap - 它将返回 QPixmap * .所以只有在真正的widget上进行绘画时才需要调用抓取代码。

关于qt - 每次需要重新绘制时,如何在像素图中抓取 qwidget/render?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19242709/

相关文章:

android - Android 上的 Qt 触觉反馈

c++ - 我需要什么 dll 来分发我的 Qt 应用程序?

qt - 当鼠标指针位于 QwtPlot 上时,如何更改所使用的光标?

c++ - QDir 目录之前的预期不合格 ID

c++ - 将 OpenCV 库与 ubuntu 上的 Qt creator 链接起来

c++ - 如何通过双击选择 QTableWidget 的行?

c++ - 从 Qt 对话框中删除 "?"-button

c++ - Qt:我们可以在运行时更改资源内容吗?

c++ - 如何从 C++ 端连接到 QML 项目的 onClick 事件

c++ - QMediaPlayer命令中的GST(gstreamer)命令