首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将QWidget呈现为QImage将失去alpha通道。

将QWidget呈现为QImage将失去alpha通道。
EN

Stack Overflow用户
提问于 2013-12-02 09:05:23
回答 1查看 3.7K关注 0票数 3

我有一个简单的Qt部件。它是一个应用简单的CSS样式的QLabel。这种风格的重要部分是圆形的边框:

代码语言:javascript
运行
复制
QString css("border-style: solid;"
       "border-width: 3px;"
       "border-radius: 7px;");

它在屏幕上显示得很好。标签的边框外的角落充满了透明的颜色,因此它在任何背景上看起来都很棒。以下是显示在另一个小部件上(背景颜色为深灰色)时的外观:

现在,当我像这样将它呈现给QImage时

代码语言:javascript
运行
复制
QImage bitmap(label->size(), QImage::Format_ARGB32);
QPainter painter(&bitmap);
balloon->render(&painter);
bitmap.save("C:/1.png");

我得到了这个(在图像编辑器中打开图像以清楚地演示一个问题):

注意,在拐角处是如何不保持透明度的。有什么问题吗?我怎样才能正确渲染它?

我尝试过这样做,以测试QImage是否能够保存alpha通道,以及我的图像编辑器是否正确地显示了它:

代码语言:javascript
运行
复制
bitmap.fill(QColor::fromRgba(qRgba(0, 0, 0, 0)));
bitmap.save("C:/1.png");

它工作的很好,我可以看到透明的格子图案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-02 10:14:11

这就是诀窍:

代码语言:javascript
运行
复制
QImage bitmap(label->size(), QImage::Format_ARGB32);
bitmap.fill(Qt::transparent);
QPainter painter(&bitmap);
label->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20324409

复制
相关文章

相似问题

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