当我用带有透明对象的QWidget子对象呈现一个QOpenGLWidget时,当我试图拍摄截图时,我观察到了一种日晒效果,如以下图片:

这个问题来自系统背景,因为当我删除它时,问题就消失了:

。
我的问题是:,在具有系统背景的QPixmap上呈现QWidget的解决方案是什么?
在这里,我的呈现代码:
QWidget widget;
QPixmap pixmap(widget.size());
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing);
widget.render(&painter, QPoint(), QRegion(), QWidget::DrawWindowBackground /* the problem is this render flag */ | QWidget::IgnoreMask | QWidget::DrawChildren);
pixmap.save("screenshot.png");属性setAutoFillBackground(true);和方法grab();与第一个屏幕截图一样。
编辑:没有OpenGL问题。当我混合两个像素映射(第一个与背景,第二个与小部件子),太阳化问题仍然存在。
发布于 2021-10-11 09:39:20
一种解决方案是在我的QPalette中设置一个窗口角色为黑色的QOpenGLWidget。
QPalette currentWidgetPalette{ palette() };
currentWidgetPalette.setColor(QPalette::Window, Qt::black);
setPalette(currentWidgetPalette);编辑:我找到了一个解决方案,可以用我的小部件在tansparent和中绘制目的地,以正确地组合像素映射。
painter.setCompositionMode(QPainter::CompositionMode_Destination);
painter.fillRect(result.rect(), Qt::transparent);
painter.setCompositionMode(QPainter::CompositionMode_Source);
widget.render(&painter, QPoint(), QRegion(), QWidget::DrawWindowBackground | QWidget::IgnoreMask | QWidget::DrawChildren);https://stackoverflow.com/questions/69498885
复制相似问题