Renderowanie QWidget do QImage traci kanał alfa
Mam prosty widget Qt. To jestQLabel
z prostym stylem CSS. Ważną częścią stylu jest okrągła granica:
QString css("border-style: solid;"
"border-width: 3px;"
"border-radius: 7px;");
Jest wyświetlany na ekranie w porządku. Narożniki etykiety poza obramowaniem są wypełnione przezroczystym kolorem, więc wygląda świetnie na każdym tle. Oto jak wygląda, gdy jest wyświetlany nad innym widżetem (który ma ciemnoszary kolor tła):
Teraz, kiedy renderuję go do QImage w ten sposób
QImage bitmap(label->size(), QImage::Format_ARGB32);
QPainter painter(&bitmap);
balloon->render(&painter);
bitmap.save("C:/1.png");
Dostaję to (obraz został otwarty w edytorze obrazów, aby wyraźnie pokazać problem):
Zauważ, że przezroczystość nie jest zachowywana w rogach. Jaki jest problem? Jak mogę renderować poprawnie?
P. S. Próbowałem tego, aby sprawdzić, czy QImage jest w stanie zapisać kanał alfa, i że mój edytor obrazów wyświetla go poprawnie:
bitmap.fill(QColor::fromRgba(qRgba(0, 0, 0, 0)));
bitmap.save("C:/1.png");
Działa dobrze, widzę przezroczystość jako wzór w kratkę.