Qt设置窗体透明

本文总结了Qt关于窗体透明的设置方法。包括使用setWindowOpacity函数实现全透明,用Qt样式表设置子控件透明,以及针对背景有无图片的情况,通过设置属性和绘制图片等方式实现父窗口透明,还给出了设置背景属性失败时的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天研究了下Qt关于窗体透明的方法,不同的方法有着不同的效果,今天在此总结一下。界面结构如下:

全透明

setWindowOpacity(double value)。该函数用来设置窗体透明度,有效范围从1.0到0.0,并且会影响子控件。默认情况下,此属性的值是1.0(不透明)。

//全透明
setWindowOpacity(0.7);
子控件透明

使用Qt样式表,background:rgba(r,g,b,opacity),rgb是颜色值,opacity是设置为半透明的透明度,有效范围从1.0到0.0。使用样式表设置一张背景图,widget和label的透明度,关于样式表可以在Qt Designer进行设置。(设置透明度要指定对象,避免影响其他控件)

    //子控件透明
    this->setStyleSheet("#centralWidget{border-image:url(://timg.jpg);}"
        "#label{background:rgba(255,255,0,0.4);}"
        "#widget{background:rgba(255,0,0,0.3);}");
父窗口透明

情况一:背景无图片。设置属性Qt::WA_TranslucentBackground将MainWindow变为全透明,在windows上这个属性需配合Qt::FramelessWindowHint使用。然后设置centralWidget样式中的opacity调节父窗口的透明度并设置子控件的不透明。

    this->setWindowFlags(Qt::FramelessWindowHint);//需要去掉标题栏
    this->setAttribute(Qt::WA_TranslucentBackground);
    this->setStyleSheet("#centralWidget{background:rgba(0,255,255,0.4);}"
        "#label{background:rgba(255,255,0,1);}"
        "#widget{background:rgba(0,255,255,1);}");

情况二:背景有图片。仍然使用属性Qt::WA_TranslucentBackground将MainWindow变为全透明。然后在paintevent中将图片绘制在窗体上,并设置透明度。

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPixmap pix("://timg.jpg");
    QPixmap scalePix = pix.scaled(this->width(), this->height(),
        Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    painter.setOpacity(0.4);
    painter.drawPixmap(0, 0, scalePix);
}

注:若设置背景属性失败,可尝试设置该属性解决,setAttribute(Qt::WA_StyledBackground);。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值