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