我有一个简单的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");
它工作正常,我可以看到透明度为方格图案.
这样做的诀窍:
QImage bitmap(label->size(), QImage::Format_ARGB32); bitmap.fill(Qt::transparent); QPainter painter(&bitmap); label->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);