Reputation: 217
I have a very small Qt application that uses labels to display a jpeg image without first putting it in a window. (I got a lot of help from Display QImage with QtGui)
Now I would like to change the alpha channel of this jpeg to make the image partially transparent. I have tried the following without any luck
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();
}
It seems like the Style Sheet isn't affecting the label at all. I have experimented with changing the other rgb values (all 0's for instance) and alternated between the background-color and the color, but the image is always the same.
Update: Thanks to eyllanesc, the following now works for me:
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();
}
Upvotes: 3
Views: 2316
Reputation: 243993
The StyleSheet
is working fine, the problem is that the QPixmap
object is drawn on the background (not the background). If you want QPixmap
to be transparent you can use one of two methods:
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);
Upvotes: 3