首发于我的个人博客:xie-kang.com
博客内有更多文章,欢迎大家访问
原文地址

前言:
很多人看到这个需求的第一想法都是录制软件窗口后的桌面内容,并且加上个高斯模糊就能实现了。
思路没有错,操作系统提供的API本质也是这样实现的。
但是我们软件是处于用户态的,怎么获取自己窗口背后的内容?当然也只能通过系统API实现!关键是如果你录制或者截图屏幕内容,在一些操作系统,比如macOS上系统会弹窗告知用户是否允许软件录制屏幕,这用户能接受吗?
所以说这么多,使用系统提供的API实现毛玻璃这个方式是最好的。

正文:
win7上可以使用DwmEnableBlurBehindWindow、win10上使用SetWindowCompositionAttribute(MSDN未公开的API)都可以实现毛玻璃的效果;

给Qt窗口设置上 setAttribute(Qt::WA_TranslucentBackground) 属性即可除去背景色将整个窗口透明。

在默认情况下使用SetWindowCompositionAttribute边框会有三条透明边在窗口的四周,因为该API实现的毛玻璃的过程是在窗口后创建了一个包括主窗口阴影的在内的辅助窗口在主窗口之后。

要除去这三条透明边可以使用 setWindowFlag(Qt::FramelessWindowHint) 创建一个无边框的窗口,效果如下:

但有时候出于实际的业务需求或者代码兼容问题我们需要保留窗口的边框,可以考虑以下方案:

1.主窗口使用

QtWin::enableBlurBehindWindow(this);
setAttribute(Qt::WA_TranslucentBackground);

实现带边框的背景透明窗口;

2.创建一个与主窗口宽高一致的Widget(或窗口),将其设置为无边框窗口以及毛玻璃效果,使其实时跟随主窗口的宽高以及大小并保持在主窗口之下;
 
注:Qt上可以使用QGraphicsBlurEffect实现控件的模糊效果,如果搭配上透明背景是否可以也实现毛玻璃效果呢?这个没有实践。

SetWindowCompositionAttribute使用示例代码:

struct WCAD
{WindowCompositionAttribute Attribute;int * Data;int SizeOfData;
};typedef int* (*pfun)(HWND hwnd, WCAD *data);HWND hWnd = HWND(winId());
HMODULE hUser = GetModuleHandle(L"user32.dll");
if (hUser) {pfun setWindowCompositionAttribute = (pfun)GetProcAddress(hUser, "SetWindowCompositionAttribute");if (setWindowCompositionAttribute) {AccentPolicy accent = {3, 0, 0, 0};//ACCENT_ENABLE_BLURBEHIND 具体枚举参加MSDNWCAD data;data.Attribute = 19;//WCA_ACCENT_POLICY 具体枚举参加MSDNdata.Data = reinterpret_cast<int *>(&accent) ;data.SizeOfData = sizeof(accent);setWindowCompositionAttribute(hWnd, &data);}
}

参考链接:

MSDN dwmapi: https://docs.microsoft.com/zh-cn/windows/win32/api/dwmapi/nf-dwmapi-dwmsetwindowattribute?redirectedfrom=MSDN

Qt 在win7上实现背景毛玻璃效果的音乐播放器: https://doc.qt.io/qt-5/qtwinextras-musicplayer-example.html

QGraphicsBlurEffect类说明: https://doc.qt.io/qt-5/qgraphicsblureffect.html

SetWindowCompositionAttribute 各设置的对比(c#): https://blog.csdn.net/wpwalter/article/details/103268596

Qt Windows上实现毛玻璃效果相关推荐

  1. python泡泡_Python实现Windows上气泡提醒效果的方法

    本文实例讲述了Python实现Windows上气泡提醒效果的方法.分享给大家供大家参考.具体实现方法如下: # -*- encoding: gbk -*- import sys import os i ...

  2. Qt工作笔记-Windows上界面滑动效果

    运行截图如下: 源码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE c ...

  3. vscode卸载background插件_使用插件一键启用 Visual Studio Code 的毛玻璃效果

    本文原文发布于我的博客 https://eyhn.in 上一次 我介绍了使用 "Custom CSS and JS Loader" 插件为 MacOS 开启毛玻璃效果.现在我把它做 ...

  4. css毛玻璃效果白边_使用css模拟vista毛玻璃效果

    近来Windows Vista的毛玻璃效果一直受到界内同行的争相模仿.小弟不才,也来发表下自己的拙见. 首先准备两张背景图片,一张为正常图片,另外一张表现为正常图片的模糊效果. 利用css里面对背景的 ...

  5. iOS毛玻璃效果(第一次写~有点紧张喔)

    iOS7以后,苹果公司提供了一种实时毛玻璃的渲染效果,苹果提供了一些方法让我们可以在UIImage上增加毛玻璃效果,但是,只是静态的效果,不是实时的,要是想要实时的效果,那该怎么办呢? 上代码:(很简 ...

  6. 毛玻璃效果在Android的实现

     本文已授权「玉刚说」微信公众号独家发布 毛玻璃效果实际上是对原图片的严重劣化,突出朦胧感,一般都是通过图片的缩放+模糊算法来实现,从性能角度考虑,模糊半径不能大于25,所以要更高的模糊效果则需要进行 ...

  7. css3 仿aero,让Qt支持Win7的Aero和毛玻璃效果

    Qt5增加了许多特性,其中 Qt Windows Extras 模块就增加了对Win7 Aero 效果的支持. 官网的介绍如下: Qt Windows Extras provide classes a ...

  8. 【Qt开发】Qt Creator在Windows上的调试器安装与配置

    Qt Creator在Windows上的调试器安装与配置 如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试 ...

  9. 图片上的文字用CSS写出毛玻璃效果

    图片上的文字用CSS写出毛玻璃效果  2016-10-04 08:11    网页设计   标签:css   1297    发表评论 半透明颜色最初的使用场景之一就是作为背景.将其叠放在照片类或其他 ...

最新文章

  1. What's preconnect.svc in 11g RAC?
  2. Hystrix文档-实现原理
  3. 基于ARM+DSP进行应用开发-经验共享
  4. Asp.net中web.config配置文件详解
  5. 浏览器根对象window之performance
  6. Ubuntu 16.04.5部署Django环境
  7. 非标准语法;请使用 _使用无线AP如何供电?
  8. 【python】字符串转换整数 (atoi) - String
  9. 汉字风格迁移篇--基于生成对抗网络的无监督字体风格转换模型
  10. 用c#实现简单的登录和注册功能
  11. html老师祝福语,教师节给老师的温馨祝福语
  12. CET-6--2018.6--2
  13. 【许晓笛】 EOS智能合约案例解析(1) 1
  14. 用例图包含关系、扩展关系、泛化关系解析
  15. 机房综合布线施工主要是几个方面
  16. 使用树莓派进行pH测定
  17. 如何实现用户不登记就不让用户继续使用正常功能
  18. 使用Python画小猪佩奇(turtle库)
  19. Android工程师进阶第九课 Android优化实战
  20. 【科普】视频剪辑中的关键帧是什么?

热门文章

  1. div+CSS浏览器兼容问题整理(IE6.0、IE7.0 ,ie8 , FireFox...)
  2. cesium实现动态圆效果之——螺旋圆
  3. SQL之LEFT JOIN,EIGHT JOIN,INSERT JOIN的区别
  4. 计算机外设:显示器是如何工作的?
  5. 宇宙最强,meltdown论文中英文对照版(三)
  6. 解决Android Studio 安装APK时device support,but apk only supports armeabi-v7 问题
  7. EduCoder Pandas高效化运算与时间序列处理 第3关:Pandas时间序列的高级应用
  8. 微信美团支付服务器异常怎么回事,无法使用微信支付?美团回应:支付系统出现异常 已全面恢复...
  9. 倍福PLC基于NT_Shutdown实现控制器自动关机重启
  10. EDSR MDSR IRAN RCN -pytorch实现及代码常见问题