首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在具有系统背景的QPixmap中呈现QPixmap

在具有系统背景的QPixmap中呈现QPixmap
EN

Stack Overflow用户
提问于 2021-10-08 16:15:53
回答 1查看 281关注 0票数 0

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

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

我的问题是:,在具有系统背景的QPixmap上呈现QWidget的解决方案是什么?

在这里,我的呈现代码:

代码语言:javascript
复制
    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问题。当我混合两个像素映射(第一个与背景,第二个与小部件子),太阳化问题仍然存在。

EN

回答 1

Stack Overflow用户

发布于 2021-10-11 09:39:20

一种解决方案是在我的QPalette中设置一个窗口角色为黑色的QOpenGLWidget。

代码语言:javascript
复制
QPalette currentWidgetPalette{ palette() };
currentWidgetPalette.setColor(QPalette::Window, Qt::black);
setPalette(currentWidgetPalette);

编辑:我找到了一个解决方案,可以用我的小部件在tansparent和中绘制目的地,以正确地组合像素映射。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69498885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档