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

时间:2013-12-02 09:05:23

标签: qt rendering transparency qwidget alpha-transparency

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

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

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

enter image description here

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

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

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

enter image description here

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

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

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

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

1 个答案:

答案 0 :(得分:5)

这就是诀窍:

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