gpt4 book ai didi

c++ - 修改无窗口 QLabel 的 alpha channel 透明度

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:36 28 4
gpt4 key购买 nike

我有一个非常小的 Qt 应用程序,它使用标签来显示 jpeg 图像,而无需先将其放入窗口中。 (我从 Display QImage with QtGui 得到了很多帮助)

现在我想更改此 jpeg 的 alpha channel 以使图像部分透明。我已经尝试了以下没有任何运气

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();
}

最佳答案

StyleSheet 工作正常,问题是 QPixmap 对象绘制在背景上(不是背景)。如果您希望 QPixmap 透明,您可以使用以下两种方法之一:

  1. 第一种方法:

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);
  1. 第二种方法:

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);

关于c++ - 修改无窗口 QLabel 的 alpha channel 透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43922099/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com