我有一个非常小的Qt应用程序,它使用标签显示jpeg图像而不先将其放在窗口中。 (我从Display QImage with QtGui)获得了很多帮助
现在我想更改此jpeg的alpha通道,使图像部分透明。我没有运气就试过以下
int main (int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel label (0, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
label.resize(1280,720);
label.setPixmap(QPixmap("test.jpg"));
label.setScaledContents(true);
// This line should set the alpha transparency to 50%
label.setStyleSheet("background-color: rgba(255,255,255,50);");
label.show();
return app.exec();
}
样式表似乎根本不会影响标签。我已尝试更改其他rgb值(例如所有0')并在背景颜色和颜色之间交替,但图像始终相同。
更新: 感谢eyllanesc,以下内容现在适用于我:
int main (int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap input ("test.jpg");
QImage image(input.size(), QImage::Format_ARGB32_Premultiplied);
image.fill(Qt::transparent);
QPainter p(&image);
p.setOpacity(0.5);
p.drawPixmap(0,0,input);
p.end();
QPixmap output = QPixmap::fromImage(image);
QLabel label (0, Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
label.setStyleSheet("background-color: rgba(255,255,255,50);");
label.resize(1280,720);
label.setPixmap(output);
label.setScaledContents(true);
label.show();
return app.exec();
}
答案 0 :(得分:1)
StyleSheet
工作正常,问题是QPixmap
对象是在背景(而不是背景)上绘制的。如果您希望QPixmap
透明,可以使用以下两种方法之一:
QPixmap input("test.jpg");
QImage image(input.size(), QImage::Format_ARGB32_Premultiplied);
image.fill(Qt::transparent);
QPainter p(&image);
p.setOpacity(0.2);
p.drawPixmap(0, 0, input);
p.end();
QPixmap output = QPixmap::fromImage(image);
label.setPixmap(output);
QPixmap input("test.jpg");
QPixmap output(input.size());
output.fill(Qt::transparent);
QPainter p(&output);
p.setOpacity(0.2);
p.drawPixmap(0, 0, input);
p.end();
label.setPixmap(output);