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

Qt实现窗口失去焦点抖动功能

一、失去焦点检测

当窗口失去焦点时会发出FocusOut事件,具体实现如下:
首先给窗口安装事件过滤器:

this->installEventFilter(this);

然后在事件过滤器函数中判断有没有失去焦点

bool MessageDialog::eventFilter(QObject *object, QEvent *event)
{if(event->type() == QEvent::FocusOut){//窗口失去焦点了}return QDialog::eventFilter(object,event);
}

二、窗口抖动实现

窗口抖动使用QPropertyAnimation来实现

1、QPropertyAnimation介绍

QPropertyAnimation是Qt提供的用于动画效果的类,它可以对Qt对象的属性进行动画处理。通过改变属性的值,可以实现平滑过渡、渐变效果等动画效果。

QPropertyAnimation继承自QAbstractAnimation类,它通过使用插值器(Interpolator)来控制属性值的变化速度,并通过使用适当的目标值和时间间隔来计算每一帧的属性值。

2、实现原理

QPropertyAnimation添加位置,左移位置->右移位置->左移位置…,然后将动画主体设置为窗口,启动动画就行。

3、实现源码

将动画封装成一个函数来使用

void MessageDialog::widgetShake(QWidget *widget, int range)
{int nX = widget->x();int nY = widget->y();QPropertyAnimation *pAnimation = new QPropertyAnimation(widget,"geometry");pAnimation->setEasingCurve(QEasingCurve::InOutSine);pAnimation->setDuration(300);pAnimation->setStartValue(QRect(QPoint(nX,nY),widget->size()));int nShakeCount = 20; //抖动次数double nStep = 1.0/nShakeCount;for(int i = 1; i < nShakeCount; i++){range = i&1 ? -range : range;pAnimation->setKeyValueAt(nStep*i,QRect(QPoint(nX + range,nY),widget->size()));}pAnimation->setEndValue(QRect(QPoint(nX,nY),widget->size()));pAnimation->start(QAbstractAnimation::DeleteWhenStopped);
}

三、抖动函数使用

bool MessageDialog::eventFilter(QObject *object, QEvent *event)
{if(event->type() == QEvent::FocusOut){this->widgetShake(this,50);}return QDialog::eventFilter(object,event);
}

相关文章:

  • 在 Kubesphere 中开启新一代云原生数仓 Databend
  • 基于51单片机的超声波测距—数码管显示
  • sqliteSQL基础
  • 理解lambda表达式
  • 在本地电脑中如何用命令操作远程服务器上的数据库
  • [力扣题解] 28. 找出字符串中第一个匹配项的下标
  • 【算法】模拟算法——Z字形变换(medium)
  • Python魔法之旅-魔法方法(08)
  • BearPi-HM Nano开发笔记
  • LiveWeb前端:深度解析与挑战应对
  • net语言编程:深入探索其奥秘与挑战
  • 说说影响网络的因素
  • Java网络编程(上)
  • 【Linux】如何利用linux项目自动化构建工具-make/Makefile以及vim编辑器构建两个小程序:倒计时和进度条
  • go语言基于Gin集成后台管理系统开发定时任务管理cron/v3好用又好看
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • bearychat的java client
  • golang中接口赋值与方法集
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript HTML DOM
  • Java方法详解
  • jQuery(一)
  • React-生命周期杂记
  • scala基础语法(二)
  • Terraform入门 - 1. 安装Terraform
  • TypeScript迭代器
  • 给第三方使用接口的 URL 签名实现
  • 异步
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # C++之functional库用法整理
  • # 数论-逆元
  • ######## golang各章节终篇索引 ########
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #QT(串口助手-界面)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (分类)KNN算法- 参数调优
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (九)信息融合方式简介
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)Google的Objective-C编码规范
  • (转)平衡树
  • (转)树状数组
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .libPaths()设置包加载目录
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .net 设置默认首页
  • .NET 中的轻量级线程安全