Qt 实现部件或者窗口(QWidget)透明效果和其他特殊效果

1、实现部件透明效果
只须在设置部件背景色时指定alpha值(rgba的第四个参数)即可,取值为0~255,取值为0时完全透明,取值为255时完全不透明。

    // 实现红色按钮的半透明效果
    ui->pushButton->setStyleSheet(R"(background-color:rgba(255,0,0,100);)");

2、实现窗口(QWidget)透明效果
作为顶级部件(没有父窗口)的窗口无法使用实现部件透明的方式实现透明效果,因此要使用下面的方式来实现。

    // 设置窗口的不透明度为 0.5,取值范围0.0~1.0,取值为0.0时完全透明
    this->setWindowOpacity(0.5);

运行程序后可以看到整个应用程序都是半透明的,但是其中的部件也被影响变为半透明的了。此时,我们就要采用下面的方式实现部件不被影响的效果。(记得注释掉setWindowOpacity)

    this->setAttribute(Qt::WA_TranslucentBackground);
    this->setWindowFlags(Qt::FramelessWindowHint);

这样实现的效果是背景完全透明,窗口的标题栏也没有了,要想实现半透明效果,可以使用重绘事件,如下所示(记得加上setAttribute和setWindowFlags):

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.fillRect(this->rect(),QColor(255,255,255,100));// 获取窗口的内部矩形并设置为半透明
}

现在运行程序可以看到,窗口已经变成了半透明状态,并且没有影响到部件,但是没有了标题栏和边框,故此时需要自定义添加一个标题栏,这里不再赘述。

3、实现部件特殊效果(模糊、阴影和染色),以阴影和透明效果为例
添加头文件:

#include <QGraphicsDropShadowEffect>// 阴影效果
#include <QGraphicsOpacityEffect>// 透明效果
    /**
     * @brief 创建透明效果
     */
    QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect;
    // 设置透明度
    opacityEffect->setOpacity(0.5);
    // 使用透明效果
    ui->pushButton->setGraphicsEffect(opacityEffect);
    
    /**
     * @brief 创建阴影效果
     */
    QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect;
    // 设置阴影颜色
    shadowEffect->setColor(QColor(100,100,100,50));
    // 设置阴影模糊半径
    shadowEffect->setBlurRadius(2);
    // 设置阴影偏移值
    shadowEffect->setOffset(10);
    // 使用阴影效果
    ui->pushButton->setGraphicsEffect(shadowEffect);

值得注意的是一定要先使用透明效果再使用阴影效果,否则阴影效果显示失败。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值