原文链接: Qt无边框窗体-模拟模态窗体抖动效果
一、概述
用Qt开发windows客户端界面确实是一大利器,兼顾性能的同时,速度相对来说也不错。再加上qss的辅助,那么一个漂亮的界面就不在话下了。
想要做出漂亮的界面,重写一个标题栏是必不可少的,那么我们肯定是需要使用Qt给我们提供的一个无边框Qt::FramelessWindowHint窗体属性。但是设置了这个属性以后,随之而来的就是一系列的问题,比如说标题栏拖拽需要我们自己搞;窗口放大缩小需要自己实现;最要命的是一些模态窗体原生的抖动效果没有了。
既然出现问题,那么我们就得想办法解决。
窗口放大缩小和拖拽在Qt的早期版本是提供了一个类文件支持的,作者本人也对这个文件进行了二次开发,可以提供更为丰富的功能。由于拖拽和缩放跟本篇文章关系不大,因此这里不做说明,感兴趣的同学可以到Qt无边框窗体-最大化时支持拖拽还原这里查看
本篇文章我们就来说一说当模态窗体弹出来时,如果点击了非模态窗体以外的应用程序界面,怎么实现一个闪动的效果。
闪动只是一个对外的信息交互,如果大家想要一些其他交互效果,可以自行实现。
二、效果展示
如效果图所示,做了一个简单的效果
- 点击主应用程序时,弹出的模态窗体边框颜色发生了变动,实现了一个抖动的效果。
- 点击桌面时,模态窗体也有一个失去焦点时的状态变化。

三、功能实现
实现窗口抖动效果,首先需要了解windows的消息ID,知道我们要接受哪个windows消息来完成闪动效果,其次就是Qt怎么接收这样的原生windows消息。
windowws消息
了解windows消息ID,随手打