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

异形遮罩之QML中的 `OpacityMask` 实战

文章目录

  • 🌧️ 传统实现的问题
    • 👉 效果图
  • 🌈 使用 OpacityMask 的理想方案
    • 👉代码如下
    • 🎯 最终效果:
  • ✨ 延伸应用
  • 🧠 总结

在 UI 设计中,经常希望实现一些“异形区域”拥有统一透明度或颜色的效果,比如多个图形重叠形成一个复杂形状,同时其背景色看起来是统一透明的。

但如果你直接将多个带透明度的图形叠加使用,就会出现一个问题:重叠区域颜色会叠加变深,显得非常不自然。

本文将结合一个具体的 QML 案例,演示如何使用 OpacityMask 遮罩技术,让多个图形在视觉上拥有“统一背景透明度”的效果,告别颜色叠加阴影!


🌧️ 传统实现的问题

先来看一个常见的场景:

我们想绘制两个矩形 + 一个圆形,颜色统一为半透明黑(#88000000)。使用最直观的方式叠加:

import QtQuick 2.15
import QtGraphicalEffects   1.15
import QtQuick.Window 2.12Window {visible: truewidth: 400height: 300title: qsTr("OpacityMask")Image {anchors.fill: parentsource: "qrc:/image.png"fillMode: Image.PreserveAspectCropmipmap : truesmooth : true}Rectangle {anchors.horizontalCenter: parent.horizontalCentery:          25width:      250height:     150color:      "transparent"//1正常两个矩形叠加,叠加区域能看到阴影Rectangle {id:     rect1y:      25width:  100height: 100color:  "#88000000"}Rectangle {id:     rect2x:      50width:  150height: 150color:  "#88000000"radius: width/2}Rectangle {x:      150y:      25width:  100height: 100color:  "#88000000"}

👉 效果图

中间区域变暗了! 这正是由于多个带透明度的图形叠加,alpha 通道和 RGB 都发生了混合,导致颜色发黑发沉。

在这里插入图片描述

🌈 使用 OpacityMask 的理想方案

为了实现真正“统一透明度”的视觉效果,核心做法是:

把所有的异形结构作为一个 遮罩层; 把颜色块作为一个 单一绘制源; 最后用 OpacityMask 把颜色源“裁剪”成异形结构。

这样,颜色只绘制一次,重叠区域也不会颜色叠加。

👉代码如下

Window {visible: truewidth: 400height: 300title: qsTr("OpacityMask")Image {anchors.fill: parentsource: "qrc:/image.png"fillMode: Image.PreserveAspectCropmipmap : truesmooth : true}Rectangle {anchors.horizontalCenter: parent.horizontalCentery:          25width:      250height:     150color:      "transparent"// 颜色源,只绘制一次的颜色块Rectangle {id:             colorSourceanchors.fill:   parentcolor:          "#88000000"visible:        false // 不直接显示,只作为 source 提供颜色}// ⚪ 中间遮罩结构:两个矩形 + 一个圆,构造完整形状Item {id: maskShapewidth: parent.widthheight: parent.heightRectangle {id:     rect1y:      25width:  100height: 100color:  "WHITE"radius:  height/4}Rectangle {id:     rect2x:      50width:  150height: 150color:  "WHITE"radius: width/2}Rectangle {x:      150y:      25width:  100height: 100color:   "WHITE"radius:  height/4}visible: false // 遮罩不直接显示}// 🎭 使用 OpacityMask:统一颜色 + 遮罩形状 => 最终视觉一致OpacityMask {anchors.fill:   parentsource:         colorSourcemaskSource:     maskShapeinvert:         false}}
}

🎯 最终效果:

整个异形区域颜色看起来完全一致;

不会因为区域重叠而变暗;

支持任意复杂遮罩图形:圆、星、路径等都可以;

真正达到“只绘制一次颜色”的目的。

在这里插入图片描述

✨ 延伸应用

复杂卡片 UI、气泡对话框、玻璃模糊区域;

某些需要 alpha 模板控制的游戏 HUD;

异形组件背景、视觉统一主题风格;

🧠 总结

使用 OpacityMask 是 QML 中处理异形遮罩 + 统一色彩透明度的推荐方式。它不仅能解决“颜色叠加变深”的视觉问题,还提供了很强的图形控制能力。

通过这种方式,你的界面设计会更干净、更专业,也更具“工业级”质感。

相关文章:

异形遮罩之QML中的 `OpacityMask` 实战

文章目录 🌧️ 传统实现的问题👉 效果图 🌈 使用 OpacityMask 的理想方案👉代码如下🎯 最终效果: ✨ 延伸应用🧠 总结 在 UI 设计中,经常希望实现一些“异形区域”拥有统一透明度或颜…...

如何为您的设计应用选择高速连接器

电气应用的设计过程需要考虑诸多因素,尤其是在设计高速网络时。许多连接器用户可能没有意识到,除了在两个互连之间组装导电线路之外,还需要考虑各种工艺。在建立高速连接并确保适当的信号完整性时,必须考虑蚀刻、公差、屏蔽等因素…...

mongodb 4.0+多文档事务的实现原理

1. 副本集事务实现(4.0)‌ ‌非严格依赖二阶段提交‌ MongoDB 4.0 在副本集环境中通过 ‌全局逻辑时钟(Logical Clock)‌ 和 ‌快照隔离(Snapshot Isolation)‌ 实现多文档事务,事务提交时通过…...

【论文阅读】UniAD: Planning-oriented Autonomous Driving

一、Introduction 传统的无人驾驶采用了区分子模块的设计,即将无人驾驶拆分为感知规划控制三个模块,这虽然能够让无人驾驶以一个很清晰的结构实现,但是感知的结果在传达到规划部分的时候,会导致部分信息丢失,这势必会…...

upload-labs二次打

1(前端js绕过) 弹窗,先看看有没有js有,禁用js 禁用后就可以上传php文件了,然后我们就去访问文件,成功 2(MIME绕过) 先上传一个php文件试试,不行,.htaccess不行, 试试MIME类型&am…...

Flutter命令行打包打不出ipa报错

Flutter打包ipa报错解决方案 在Flutter开发中,打包iOS应用时可能会遇到以下错误: error: exportArchive: The data couldn’t be read because it isn’ in the correct format. 或者 Encountered error while creating the IPA: error: exportArchive…...

网页制作中的MVC和MVT

MVC(模型-视图-控制器)和MVT(模型-模板-视图)是两种常见的软件架构模式,通常用于Web应用程序的设计。它们之间的主要区别在于各自的组件职责和工作方式。 MVC(模型-视图-控制器): 模…...

C. Good Subarrays

time limit per test 2 seconds memory limit per test 256 megabytes You are given an array a1,a2,…,ana1,a2,…,an consisting of integers from 00 to 99. A subarray al,al1,al2,…,ar−1,aral,al1,al2,…,ar−1,ar is good if the sum of elements of this subarra…...

聊天室项目day4(redis实现验证码期限,实现redis连接池)

1.redis连接池操作和之前所学过的io_context连接池原理一样这里不多赘述,也是创建多个连接,使用时按顺序取出来。 2.知识补充redisConnect()函数建立与 Redis 服务器的非阻塞网络连接,成功返回 redisContext*(连接上下文指针&…...

提交至git

通过 Pull Request 提交代码 如果你无法直接推送到 master 分支(例如,因为分支保护或权限限制),通常的做法是将代码推送到一个新分支,并通过 Pull Request(或 Merge Request)提交代码&#xff1…...

0x06.Redis 中常见的数据类型有哪些?

回答重点 Redis 常见的数据结构主要有五种,这五种类型分别为:String(字符串)、List(列表)、Hash、Set(集合)、Zset(有序集合,也叫sorted set)。 String 字符串是Redis中最基本的数据类型,可以存储任何类型的数据,包括文本、数字和二进制数据。它的最大长度为512MB。 使…...

如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程

🛠️ 如何查看自己 Android App 的私有数据?从 adb backup 到数据提取全过程 📌 前言:作为一名 Android 开发者,我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的,比如有没有数据写入成功、有…...

提权实战!

就是提升权限,当我们拿到一个shell权限较低,当满足MySQL提权的要求时,就可以进行这个提权。 MySQL数据库提权(Privilege Escalation)是指攻击者通过技术手段,从低权限的数据库用户提升到更高权限&#xff…...

Vue使用el-table给每一行数据上面增加一行自定义合并行

// template <template><el-table:data"flattenedData":span-method"objectSpanMethod"borderclass"custom-header-table"style"width: 100%"ref"myTable":height"60vh"><!-- 订单详情列 -->&l…...

ChromeOS 135 版本更新

ChromeOS 135 版本更新 一、ChromeOS 135 更新内容 1. ChromeOS 电池寿命优化策略 为了延长 Chromebook 的使用寿命&#xff0c;ChromeOS 135 引入了一项全新的电池充电限制策略 —— DevicePowerBatteryChargingOptimization&#xff0c;可提供更多充电优化选项&#xff0c…...

国内协作机器手焊接领域领军人物分析

国内焊接协作机器手领域的专家涵盖学术界与产业界,他们在核心技术研发、行业标准制定及重大工程应用中发挥关键作用。以下从技术方向、行业贡献、典型案例三个维度展开分析: 一、学术界领军人物:理论创新与技术突破 1. 吴林(哈尔滨工业大学) 学术地位:中国焊接学会名誉…...

javaSE.Lambda表达式

如果一个接口中有且只有一个待实现的抽象方法&#xff0c;那么我们可以将匿名内部类简写为Lambda表达式。 简写规则 标准格式&#xff1a; &#xff08;【参数类型 参数名称&#xff0c;】...&#xff09; -> {代码语句&#xff0c; 包括返回值} 只有一行花括号{}可以省略。…...

【随身wifi】青龙面板保姆级教程

0.操作前必看 本教程基于Debian系统&#xff0c;从Docker环境。面板安装&#xff0c;到最后拉取脚本的使用。 可以拉库跑狗东京豆&#xff0c;elm红包等等&#xff0c;也可以跑写自己写的脚本&#xff0c;自行探索 重要的号别搞&#xff0c;容易黑号&#xff0c;黑号自己负责…...

Android 之美国关税问题导致 GitHub 403 无法正常访问,责任在谁?

这几天各国关税问题导致世界动荡不安&#xff0c;如今GitHub又无法正常访问&#xff0c;是不是Google到时候也无法正常使用了。...

深入解析 Android 图形系统:Canvas、Skia、OpenGL 与 SurfaceFlinger 的协作

在 Android 应用开发中&#xff0c;流畅的 UI 渲染是用户体验的核心。但你是否好奇&#xff0c;一个简单的 View 是如何从代码中的 onDraw() 方法一步步变成屏幕上的像素的&#xff1f;本文将从底层图形系统的视角&#xff0c;解析 Android 中 Canvas、Skia、OpenGL ES 和 Surf…...

4月13日星期日早报简报微语报早读

4月13日星期日&#xff0c;农历三月十六&#xff0c;早报#微语早读。 1、北京处置倒伏树木843棵&#xff0c;已全部处置完毕&#xff1b; 2、山西大同“订婚强奸案”本月16日二审宣判&#xff0c;一审男方被判3年刑&#xff1b; 3、今年我国快递业务量已突破500亿件&#xf…...

动态路由, RIP路由协议,RIPv1,RIPv2

动态路由 1、回顾 路由&#xff1a;从源主机到目标主机的过程 源主机发送数据给目标主机&#xff0c;源主机会查看自身的路由信息 如果目标主机是自己同网段&#xff0c;源主机查看的是直连路由 如果目标主机和自己不同网段&#xff0c;源主机查看的是静态路由、动态路由、默…...

【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测

基于穿戴装备的身体活动监测 摘要 本研究基于加速度计采集的活动数据&#xff0c;旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理&#xff0c;活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类&#xff0c;进而计算每个志愿者在…...

212、【图论】字符串接龙(Python)

题目描述 题目链接&#xff1a;110. 字符串接龙 代码实现 import collectionsn int(input()) beginStr, endStr input().split() strList [input() for _ in range(n)]deque collections.deque() # 使用队列遍历结点 deque.append([beginStr, 1]) # 存储当前字符串和遍…...

车载以太网-TLS

文章目录 车载以太网与TLS的技术背景核心定位车载以太网TLS的技术架构车载TLS的核心安全机制TLS报文结构详解TLS工作机制密钥交换与计算流程标题完整握手流程(1-RTT)数据传输加密流程车载TLS的独特优化策略车载TLS的安全威胁相关标准车载以太网TLS(Transport Layer Security…...

大模型面经 | 手撕多头注意力机制(Multi-Head Attention)

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

02_位掩码逻辑及Java示例

文章目录 一、位掩码核心逻辑二、Java示例&#xff1a;权限管理‌三、关键点解析‌四、优缺点分析‌五、适用场景 位掩码&#xff08;Bitmask&#xff09;是一种利用二进制位进行状态管理的技术&#xff0c;通过位运算高效处理多个布尔标志。 一、位掩码核心逻辑 ‌基本概念‌…...

【UE5】RTS游戏的框选功能+行军线效果实现

目录 效果 步骤 一、项目准备 二、框选NPC并移动到指定地点 三、框选效果 四、行军线效果 效果 步骤 一、项目准备 1. 新建一个俯视角游戏工程 2. 新建一个pawn、玩家控制器和游戏模式,这里分别命名为“MyPawn”、“MyController”和“MyGameMode” 3. 打开“MyGam…...

GO语言-数据类型

文章目录 变量定义1. 整数类型2. 浮点类型3. 字符类型4. 布尔类型5. 字符串类型5.1 字符串的本质5.2 常用字符串处理函数(strings包)5.3 修改字符串的方式 6. 数据默认值7. 类型转换 变量定义 代码如下&#xff1a; package mainimport "fmt"var i1 1000 var i2 i…...

低资源需求的大模型训练项目---3、综合对比与选型建议

综合对比与选型建议 1. Qwen2.5-0.5B 适用性分析&#xff1a; • 优势&#xff1a; • 工业级全流程支持&#xff1a;阿里云提供了完整的预训练、微调、强化学习&#xff08;RLHF&#xff09;代码和文档&#xff0c;支持从数据处理到模型部署的全链路实践。 • 性能与场景适配…...