Rendering QWidget to QImage loses alpha-channel

我怕爱的太早我们不能终老 提交于 2019-12-01 06:54:58

问题


I have a simple Qt widget. It's a QLabel with a simple CSS style applied. The important part of the style is a round border:

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

It is displayed on screen fine. The corners of the label beyond the border are filled with transparent color, so it looks great on any background. Here's how it looks when displayed over another widget (which has dark grey background color):

Now, when I render it to QImage like so

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

I get this (image opened in image editor to demonstrate a problem clearly):

Note how transparency is not preserved around the corners. What's the problem? How can I render it correctly?

P. S. I have tried this to test that QImage is capable of saving alpha channel, and that my image editor displays it correctly:

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

It works fine, I can see transparency as checkered pattern.


回答1:


This does the trick:

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


来源:https://stackoverflow.com/questions/20324409/rendering-qwidget-to-qimage-loses-alpha-channel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!