穿透模式

概述

穿透模式是一种让浮动窗口「对鼠标事件透明」的窗口特性,使鼠标点击可以穿透当前窗口到达下层应用,实现多任务并行操作。

三种窗口状态对比

状态

鼠标行为

适用场景

普通模式

窗口拦截所有鼠标事件

需要完整交互的主窗口

穿透模式

鼠标穿透窗口到达下层

监控类、装饰类浮动窗口

锁定模式

保留局部交互区域

需要持续触达的控制面板

技术原理

穿透模式基于 Qt 的 WA_TransparentForMouseEvents 属性实现。当窗口启用该属性时:

  1. Qt 将窗口从鼠标事件路由中完全剔除

  2. 鼠标事件「穿透」当前窗口,直接投递到下层的窗口或桌面

  3. 窗口仍然保持可见(不像隐藏),但对输入完全透明

此机制与操作系统的窗口合成器协同工作,确保在启用透明效果的同时保持性能。

端到端使用场景

场景一:游戏直播监控

主播在直播时需要同时监控聊天弹幕和游戏画面。使用穿透模式将监控面板悬浮在游戏窗口上方,可以在不切换焦点的情况下同时看到两面信息,鼠标仍然可以直接操作游戏。

场景二:设计稿对照

设计师在修改 UI 时需要参考原设计稿。将设计稿以穿透窗口悬浮在设计软件上方,边对照边修改,减少窗口切换频率。

场景三:实时数据大屏

金融交易员需要同时查看行情数据和交易界面。将行情窗口设为穿透,鼠标可以直接点击下层的交易按钮,实现多屏协同效果。

设计哲学

为什么需要穿透模式?

  1. 减少焦点切换 — 传统多窗口工作流需要频繁切换焦点,穿透模式让信息层叠成为可能

  2. 保持上下文 — 用户无需在多个应用间 mental switch,减少认知负担

  3. 空间利用率 — 在单一屏幕内实现「信息叠加」,尤其适合低分辨率或紧凑工作区

  4. 渐进式交互 — 锁定模式提供「选择性穿透」,让用户在穿透和交互之间取得平衡

穿透模式不是为了替代普通窗口,而是为特定工作流提供一种「不干扰」的交互方式——让信息「在眼前」,让操作「在背后」。