当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/288545.html

相关文章:

  • 在 CentOS 系统中,您可以使用多种工具来查看网络速度和流量
  • 深入探索离散 Hopfield 神经网络
  • 【CVPR2024】2024年CVPR的3D 目标检测的综述(还在补充中)
  • 封装一个省市区的筛选组件
  • 06.VSCODE:备战大项目,CMake专项配置
  • 新版 idea 编写 idea 插件时,启动出现 ClassNotFound
  • 深度解析TCP与UDP协议
  • 每日一题——第七十九题
  • How to install mysql 5.7 with podman in Ubuntu 24.04
  • 三十二、初识Gin框架
  • chunqiude
  • JS设计模式之“幽灵工厂” - 抽象工厂模式
  • 【贪心算法】区间类算法题(整数替换、俄罗斯套娃、重构字符串等、C++)
  • OpenAI API: Can I remove the line break from the response with a parameter?
  • OpenCVSharp中基本绘图函数
  • Qt Dialog退出事件
  • Golang使用Quic-Go开源库实现Quic客户端和服务端
  • Unity接入飞行遥杆外设
  • 【BES2500x系列 -- RTX5操作系统】Battery模块 -- 创建电池检测定时器 --(十五)
  • 利用Spring Boot的@Transactional注解保障业务数据的一致性
  • 2024 【Delphi 12】苹果ios开发环境配置(五星保姆级)
  • UML(ER) manual book
  • 深入理解Java序列化:从入门到实践
  • c++ std::advance 使用简介
  • MySQL库表设计规范
  • IMU助力预测青少年脊柱侧弯