将QWidget渲染到QImage会丢失alpha通道

 本人xiao13 发布于 2023-02-13 14:36

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

QString css("border-style: solid;"
       "border-width: 3px;"
       "border-radius: 7px;");

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

在此输入图像描述

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

QImage bitmap(label->size(), QImage::Format_ARGB32);
QPainter painter(&bitmap);
balloon->render(&painter);
bitmap.save("C:/1.png");

我明白了(在图像编辑器中打开图像以清楚地显示问题):

在此输入图像描述

请注意角落周围的透明度是如何保留的.有什么问题?我该如何正确渲染?

PS我试过这个来测试QImage是否能够保存alpha通道,并且我的图像编辑器正确显示它:

bitmap.fill(QColor::fromRgba(qRgba(0, 0, 0, 0)));
bitmap.save("C:/1.png");

它工作正常,我可以看到透明度为方格图案.

1 个回答
  • 这样做的诀窍:

    QImage bitmap(label->size(), QImage::Format_ARGB32);
    bitmap.fill(Qt::transparent);
    QPainter painter(&bitmap);
    label->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);
    

    2023-02-13 14:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有