在Qt中实现类桌宠的无边框窗口
无边框窗口的三个关键设置
窗口类继承自 QWidget,构造函数中只需两句代码就能搭出无边框的骨架:
1 | |
各参数的作用:
WA_TranslucentBackground:允许窗口背景透明,PNG 的透明区域才不会变黑底FramelessWindowHint:去掉系统标题栏和边框WindowStaysOnTopHint:让窗口常驻前景(总在最上层)
这三个标志合起来就能让你的窗口变成一个”浮动的透明图片”。
跨平台的窗口形状处理
如果你想让透明区域真的”穿透”(即鼠标点击透明区域时穿过这个窗口到下层),有两套方案:
Windows 方案
1 | |
选择不主动裁剪窗口形状,避免半透明边缘被硬裁切后出现锯齿或边缘异常。
Linux 方案(X11)
1 | |
这个方案使用 X11 Shape 扩展,在系统级别裁剪输入区域,比在 Qt 层处理更彻底。
在Qt中实现类桌宠的无边框窗口
https://zao-chen.github.io/posts/8cd07b68/