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

Qt窗口关闭特效:自底而上逐渐消失

废话不多说,直接上代码:
构造函数:

MyWidget(QWidget *parent = nullptr) {// 设置窗口属性:支持透明背景setAttribute(Qt::WA_TranslucentBackground);// 移除窗口边框setWindowFlags(Qt::FramelessWindowHint);}

closeEvent函数:

    void closeEvent(QCloseEvent *event) override {if (!isClosing) {event->ignore();auto effect = new QGraphicsOpacityEffect(this);effect->setOpacity(1.0); // 设置初始透明度为完全不透明this->setGraphicsEffect(effect);auto timeLine = new QTimeLine(500, this); // 动画时长1000msconnect(timeLine, &QTimeLine::valueChanged, this, [=](qreal value) {// 根据进度计算渐变参数//qDebug()<<"Value: "<<value;QLinearGradient gradient(0, this->height(), 0, 0);gradient.setColorAt(0, QColor(255,255,255, 0));   // 底部透明gradient.setColorAt(value, QColor(255,255,255, 0));   // 底部透明gradient.setColorAt(1, QColor(255,255,255, 255)); // 顶部不透明// 应用渐变遮罩并设置整体透明度effect->setOpacityMask(gradient);effect->setOpacity(1 - value);});connect(timeLine, &QTimeLine::finished, this, [this]() {isClosing = true;close(); // 动画完成后关闭窗口});timeLine->start();} else {event->accept();}}

再来个槽函数绑定一下关闭窗口退出:


private slots:void on_pushButton_1_clicked(){QApplication::quit();}private:bool isClosing = false; // 标志位,控制是否正在关闭

效果如下:
 

 

相关文章:

  • 【补题】Codeforces Round 664 (Div. 1) A. Boboniu Chats with Du
  • 蓝桥杯赛后总结
  • AI时代生产工厂制造业数字化转型培训师培训讲师唐兴通教授专家顾问清华大学讲授AI库存降本增效智能制造供应链生产调度智能管理设备健康
  • 微波功率器件的发展
  • 部署若依项目到服务器遇到的问题
  • 要搞一个PHP的工程,顺到手科普下VS Code
  • openGauss新特性 | HTAP新特性介绍
  • 西门子PLC S7-1200 电动机的软启动控制
  • DeepSeek-V3 解读,第一部分:理解 Multi-Head Latent Attention
  • RHCSA Linux 系统 文件系统权限
  • 关于我的算法文章学习路线
  • Go与Cpp的本质区别
  • 量子机器学习中的GPU加速实践:基于CUDA Quantum的混合编程模型探索
  • Java对集合进行操作,赋值新字段
  • k8s术语之Replication Controller
  • MySQL中ROW_NUMBER() OVER的用法以及使用场景
  • CentOS网络之network和NetworkManager深度解析
  • windows系统常用快捷键(CMD常用命令,DOS常用命令)
  • PostgreSQL数据库操作基本命令
  • windows 下 oracle 数据库的备份与还原
  • 荆州市委书记汪元程:全市各级干部要做到慎微、慎初、慎独、慎友
  • 北大深圳研究生院成立科学智能学院:培养交叉复合型人才
  • 武汉一季度GDP为4759.41亿元,同比增长5.4%
  • 朝鲜派兵库尔斯克是否有助于解决乌克兰危机?外交部回应
  • 公交公司须关注新出行需求:“单车巴士”能否常态化
  • 大学2025丨专访北邮校长徐坤:工科教育要真正回归工程本质