異形遮罩之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 中處理異形遮罩 + 統一色彩透明度的推薦方式。它不僅能解決“顏色疊加變深”的視覺問題,還提供了很強的圖形控制能力。

通過這種方式,你的界面設計會更干凈、更專業,也更具“工業級”質感。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77606.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據可視化 —— 堆形圖應用(大全)

一、案例一:溫度堆積圖 # 導入 matplotlib 庫中的 pyplot 模塊,這個模塊提供了類似于 MATLAB 的繪圖接口, # 方便我們創建各種類型的可視化圖表,比如折線圖、柱狀圖、散點圖等 import matplotlib.pyplot as plt # 導入 numpy 庫&…

python工程中的包管理(requirements.txt)

pip install -r requirements.txtpython工程通過requirements.txt來管理依賴庫版本,上述命令,可以一把安裝依賴庫,類似java中maven的pom.xml文件。 參考 [](

操作系統 3.4-段頁結合的實際內存管理

段與頁結合的初步思路 虛擬內存的引入: 為了結合段和頁的優勢,操作系統引入了虛擬內存的概念。虛擬內存是一段地址空間,它映射到物理內存上,但對用戶程序是透明的。 段到虛擬內存的映射: 用戶程序中的段首先映射到虛…

【Amazon EC2】為何基于瀏覽器的EC2 Instance Connect 客戶端連接不上EC2實例

文章目錄 前言📖一、報錯先知?二、問題復現😯三、解決辦法🎲四、驗證結果👍五、參考鏈接🔗 前言📖 這篇文章將講述我在 Amazon EC2 上使用 RHEL9 AMI 時無法連接到 EC2 實例時所遇到的麻煩😖 …

Python學習筆記(二)(字符串)

文章目錄 編寫簡單的程序一、標識符 (Identifiers)及關鍵字命名規則:命名慣例:關鍵字 二、變量與賦值 (Variables & Assignment)變量定義:多重賦值:變量交換:(很方便喲) 三、輸入與輸出 (In…

Hydra Columnar:一個開源的PostgreSQL列式存儲引擎

Hydra Columnar 是一個 PostgreSQL 列式存儲插件,專為分析型(OLAP)工作負載設計,旨在提升大規模分析查詢和批量更新的效率。 Hydra Columnar 以擴展插件的方式提供,主要特點包括: 采用列式存儲&#xff0c…

es的告警信息

Elasticsearch(ES)是一個開源的分布式搜索和分析引擎,在運行過程中可能會產生多種告警信息,以提示用戶系統中存在的潛在問題或異常情況。以下是一些常見的 ES 告警信息及其含義和處理方法: 集群健康狀態告警 信息示例…

健康與好身體筆記

文章目錄 保證睡眠飯后百步走,活到九十九補充鈣質一副好腸胃肚子咕咕叫 健康和工作的取舍 以前對健康沒概念,但是隨著年齡增長,健康問題凸顯出來。 持續維護該文檔,健康是個永恒的話題。 保證睡眠 一是心態要好,沾枕…

vue實現在線進制轉換

vue實現在線進制轉換 主要功能包括: 1.支持2-36進制之間的轉換。 2.支持整數和浮點數的轉換。 3.輸入驗證(雖然可能存在不嚴格的情況)。 4.錯誤提示。 5.結果展示,包括大寫字母。 6.用戶友好的界面,包括下拉菜單、輸…

智體知識庫:poplang編程語言是什么?

問:poplang語言是什么 Poplang 語言簡介 Poplang(OPCode-Oriented Programming Language)是一種面向操作碼(Opcode)的輕量級編程語言,主要用于智體(Agent)系統中的自動化任務處理、…

二分查找5:852. 山脈數組的峰頂索引

鏈接:852. 山脈數組的峰頂索引 - 力扣(LeetCode) 題解: 事實證明,二分查找不局限于有序數組,非有序的數組也同樣適用 二分查找主要思想在于二段性,即將數組分為兩段。本體就可以將數組分為ar…

下列軟件包有未滿足的依賴關系: python3-catkin-pkg : 沖突: catkin 但是 0.8.10-

下列軟件包有未滿足的依賴關系: python3-catkin-pkg : 沖突: catkin 但是 0.8.10- 解決: 1. 確認當前的包狀態 首先,運行以下命令來查看當前安裝的catkin和python3-catkin-pkg版本,以及它們之間的依賴關系: dpkg -l | grep ca…

深度學習:AI 大模型時代的智能引擎

當 Deepspeek 以逼真到難辨真假的語音合成和視頻生成技術橫空出世,瞬間引發了全球對 AI 倫理與技術邊界的激烈討論。從偽造名人演講、制造虛假新聞,到影視行業的特效革新,這項技術以驚人的速度滲透進大眾視野。但在 Deepspeek 強大功能的背后…

醫學分割新標桿!雙路徑PGM-UNet:CNN+Mamba實現病灶毫厘級捕捉

一、引言:醫學圖像分割的挑戰與機遇 醫學圖像分割是輔助疾病診斷和治療規劃的關鍵技術,但傳統方法常受限于復雜病理特征和微小結構。現有深度學習模型(如CNN和Transformer)雖各有優勢,但CNN難以建模長距離依賴&…

CV - 目標檢測

物體檢測 目標檢測和圖片分類的區別: 圖像分類(Image Classification) 目的:圖像分類的目的是識別出圖像中主要物體的類別。它試圖回答“圖像是什么?”的問題。 輸出:通常輸出是一個標簽或一組概率值&am…

高并發秒殺系統設計:關鍵技術解析與典型陷阱規避

電商、在線票務等眾多互聯網業務場景中,高并發秒殺活動屢見不鮮。這類活動往往在短時間內會涌入海量的用戶請求,對系統架構的性能、穩定性和可用性提出了極高的挑戰。曾經,高并發秒殺架構設計讓許多開發者望而生畏,然而&#xff0…

藍橋杯--結束

沖刺題單 基礎 一、簡單模擬(循環數組日期進制) (一)日期模擬 知識點 1.把月份寫為數組,二月默認為28天。 2.寫一個判斷閏年的方法,然后循環年份的時候判斷并更新二月的天數 3.對于星期數的計算&#…

13、nRF52xx藍牙學習(GPIOTE組件方式的任務配置)

下面再來探討下驅動庫如何實現任務的配置,驅動庫的實現步驟應該和寄存器方式對應,關 鍵點就是如何調用驅動庫的函數。 本例里同樣的對比寄存器方式編寫兩路的 GPOITE 任務輸出,一路配置為輸出翻轉,一路設 置為輸出低電平。和 …

Java的基本語法(1)

一、運算符和表達式 舉例說明什么是運算符,什么是表達式: int a 1; int b 2; int c a b; 在這個例子當中,是運算符,并且是算術運算符 ab是表達式,因為是運算符,所以ab是算術表達式 1.1算術運算符 …

C++學習之密碼學知識

目錄 1.文檔介紹 2.知識點概述 3.項目準備 4.序列化介紹 5.項目中基礎組件介紹 6.基礎模塊在項目中作用 7.項目中其他模塊介紹 8.加密三要素 9.對稱加密和非堆成加密 10.對稱和非對稱加密特點 11.堆成加密算法des 12.des對稱加密算法 13.對稱加密算法aes 14.知識點…