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

Qt::WA_TranslucentBackground

        最近开发遇见了,混成关闭窗口阻塞后,拖动其他窗口到上方会出现残影的问题,后来通过增加Qt::WA_TranslucentBackground解决此问题,以下是解决问题的原因。

        在说明问题前,我们先了解一下混成关闭后,是谁在绘制窗口:

          当混成关闭时,窗口的绘制通常是由X11或其他窗口系统(如Wayland)来处理,而不是Qt直接绘制。具体来说:

        1. X11窗口管理:
           在X11环境中,窗口的内容是由X服务器管理的。X服务器负责处理窗口的显示、重绘和事件分发。Qt只是向X服务器发出绘制请求,X服务器负责最终的绘制。

        2. Qt的角色:
           Qt在这种情况下提供的是高层的绘制抽象。它通过调用X11的API来请求重绘、移动窗口等操作,但实际的渲染是由X11来完成的。

        3. 透明背景的影响:
           即便混成关闭,设置 `Qt::WA_TranslucentBackground` 后,Qt会通过调整窗口的绘制请求来优化X11的重绘过程,减少了可能的残影现象。X11会根据这些请求管理窗口的显示。

解决问题原因:

        在X11中,当一个窗口被阻塞或移动时,如果没有设置 `Qt::WA_TranslucentBackground` 属性,可能会出现残影,主要是因为窗口的重绘机制和X11的处理方式:

        1. 背景绘制:
           - 默认情况下,窗口有一个背景填充(通常是窗口的背景色)。当一个窗口被移动或覆盖时,X11可能不会立即更新被遮挡区域的内容。结果是,旧的内容仍然留在屏幕上,形成残影。

        2. 重绘请求:
           - 没有设置透明背景时,Qt会向X11发出绘制请求,但这些请求可能不会触发对窗口背景的重新绘制,因为X11并不需要“清空”旧的背景内容,只需绘制新内容。因此,旧的窗口内容可能依然可见。

        3. 透明窗口的优化:
           - 设置 `Qt::WA_TranslucentBackground` 时,Qt改变了绘制请求的方式,使得X11处理窗口时会以透明形式对待。这意味着X11需要重新考虑如何处理重叠区域,确保旧的内容被正确地更新或清除,从而减少残影现象。

        4. 窗口系统的行为:
           - X11的窗口系统设计在不同条件下的表现可能会有所不同。透明窗口可能会触发特定的优化策略,确保在窗口移动或交互时内容被正确处理。
      


http://www.kler.cn/news/327891.html

相关文章:

  • 成都睿明智科技有限公司抖音开店怎么样?
  • 社交内容电商中的新机遇:2+1链动模式AI智能名片商城小程序
  • 10款好用的开源 HarmonyOS 工具库
  • 7-1.Android SQLite 之 SQLiteDatabase 简单编码模板(SQLiteDatabase 使用、SQL 语句编写)
  • 矩阵系统源码搭建的具体步骤,支持oem,源码搭建
  • Redis的基础通用命令
  • 3D Gaussian Splatting 学习笔记
  • VTK 与 OpenCV 的区别和各自的特点
  • 【笔记】X射线的衍射方向
  • golang学习笔记26-管道(Channel)【重要】
  • mock数据,不使用springboot的单元测试
  • 5G N2 N3 N6 NB口
  • C语言系列4——指针与数组(1)
  • 以矩阵的视角解多元一次方程组——矩阵消元
  • 需求6:如何写一个后端接口?
  • 使用JavaScript实现动态表格
  • 【MYSQL】授权远程连接的用户
  • Web认识 -- 第一课
  • 使用AT command 修改手机APN
  • Python Pandas轻松实现函数式编程
  • springboot+neo4j demo
  • jQuery UI 工作原理
  • 基于微信小程序的旅游助手的设计与实现(源码+定制+文档讲解)
  • Android常用C++特性之std::make_unique
  • 【机器学习基础】Transformer学习
  • CATIA风扇
  • 数据可视化分析系统-解锁企业信息的利器
  • 小徐影院:Spring Boot技术下的影院革新
  • SOMEIP_ETS_143: SD_Request_non_existing_ServiceID
  • 完整网络模型训练(一)