У меня простой виджет Qt. Это QLabel
с простым стилем CSS. Важной частью стиля является круглый бордюр:Оказание QWidget для QImage теряет альфа-канал
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");
Я получаю открыл это (изображение в графическом редакторе, чтобы продемонстрировать проблему ясно):
Обратите внимание, как прозрачность п не сохранились вокруг углов. В чем проблема? Как я могу сделать это правильно?
P. S. Я попытался это, чтобы проверить, что QImage способен спасти альфа-канал, и что мой редактор изображений отображает его правильно:
bitmap.fill(QColor::fromRgba(qRgba(0, 0, 0, 0)));
bitmap.save("C:/1.png");
Он отлично работает, я могу видеть прозрачность как в шахматном порядке.
причиной является то, что по умолчанию цвет изображения не является 'Qt :: transparent' –
@ratchetfreak: это не просто. Просто вызвать 'fill' недостаточно,' QWidget :: DrawChildren' также необходим. –