一、场景
在平常的开发过程中,我们常常会遇到需要设置Widget窗口背景图片透明度的方式。一般会有三种方式可以进行设置。
二、方式一(使用图形遮罩功能SetMask函数)
class BackGroundWidget01 : public QFrame
{
Q_OBJECT
public:
BackGroundWidget01();
};
BackGroundWidget01::BackGroundWidget01()
{
resize(800,600);
QPixmap pixmap(":/images/xingkong01.jpg");
QPalette palette;
palette.setBrush(this->backgroundRole(),QBrush(pixmap));
setPalette(palette);
setMask(pixmap.mask()); //可以将图片中透明部分显示为透明的
setAutoFillBackground(true);
setWindowOpacity(0.9); //设置widget窗体透明度
}
三、方法二(使用paintEvent重绘事件)
class BackGroundWidget02 : public QFrame
{
Q_OBJECT
public:
BackGroundWidget02(QWidget *parent = 0);
private:
void paintEvent(QPaintEvent *event);
private:
};
BackGroundWidget02::BackGroundWidget02(QWidget *parent):QFrame(parent)
{
resize(800, 600);
}
void BackGroundWidget02::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setOpacity(0.8); //0.7
painter.drawPixmap(rect(),QPixmap(":/images/xingkong01.jpg"), QRect());
}
四、方法三(使用setStyleSheet函数)
class BackGroundWidget03 : public QFrame
{
Q_OBJECT
public:
BackGroundWidget03();
private:
};
BackGroundWidget03::BackGroundWidget03()
{
setObjectName("myframe");
setStyleSheet("QFrame#myframe{border-image:url(:/images/xingkong01.jpg)}");
}
本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。