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

QML元素 - ZoomBlur

QML 的 ZoomBlur 用于创建镜头缩放模糊效果,模拟元素从中心向外扩散的径向动态模糊,适用于焦点缩放、转场动画、视觉冲击增强等场景。以下是详细使用技巧和优化指南:


1. 基本用法

import QtQuick 2.15
import QtQuick.Effects 1.15  // 确保模块正确引入Image {id: sourceImagesource: "image.png"anchors.fill: parent// 应用镜头缩放模糊layer.enabled: truelayer.effect: ZoomBlur {anchors.fill: sourceImagecenter: Qt.point(width/2, height/2) // 模糊中心点length: 32       // 模糊强度(像素距离)samples: 24      // 采样数(影响平滑度)transparentBorder: true  // 处理边缘透明区域}
}
关键属性
  • center:模糊中心点(默认元素中心),决定模糊扩散的起点。
  • length:模糊强度,值越大拖影越长(0 到 64)。
  • samples:采样数,建议设为 length * 0.75 以上(如 length: 32, samples: 24)。
  • transparentBorder:设为 true 避免边缘黑边。

2. 效果控制

(1) 动态模糊中心
ZoomBlur {center: Qt.point(mouseArea.mouseX, mouseArea.mouseY) // 跟随鼠标位置length: 40samples: 30
}MouseArea {id: mouseAreaanchors.fill: parenthoverEnabled: true
}
(2) 模糊方向与强度
  • 缩放模糊length > 0 时,模拟从中心向外扩散的模糊(类似镜头快速缩放)。
  • 反向模糊:通过负值 length 模拟向内收缩的模糊(需自定义着色器,默认不支持)。

3. 动态效果实现

(1) 转场动画模糊
// 页面切换时添加缩放模糊过渡
ZoomBlur {length: pageTransition.progress * 64  // 根据转场进度调整模糊强度samples: 32
}PageTransition {id: pageTransition// ... 页面切换逻辑
}
(2) 按钮点击缩放反馈
Rectangle {id: buttonwidth: 120height: 40color: "lightblue"layer.effect: ZoomBlur {length: button.pressed ? 24 : 0  // 点击时模糊center: Qt.point(width/2, height/2)samples: 16Behavior on length { NumberAnimation { duration: 200 } }}MouseArea {anchors.fill: parentonPressed: button.pressed = trueonReleased: button.pressed = false}
}

4. 性能优化

  • 控制 samples 值:在低端设备上建议 ≤ 24
  • 启用缓存:静态模糊设置 cached: true
  • 降采样处理
    layer.textureSize: Qt.size(width/2, height/2)  // 纹理尺寸降为50%
    

5. 常见问题

(1) 模糊效果边缘异常
  • 启用 transparentBorder: true
  • 扩展源图像边界(如 sourceSize: Qt.size(width*1.1, height*1.1))。
(2) 模糊中心偏移
  • 确保 center 坐标正确(相对于元素局部坐标系)。
  • 动态绑定中心点位置:
    center: Qt.point(width*0.2, height*0.8)  // 中心点位于元素左下方
    
(3) 性能卡顿
  • 减少 samples 和 length 值。
  • 避免高频更新模糊属性(如每帧动画)。

6. 进阶技巧

(1) 局部模糊(遮罩裁剪)
Rectangle {width: 300height: 300layer.enabled: truelayer.effect: OpacityMask {maskSource: Rectangle {  // 圆形遮罩width: 300height: 300radius: 150}ZoomBlur {length: 40samples: 32}}
}
(2) 结合颜色叠加
ZoomBlur {length: 30samples: 24
}Rectangle {anchors.fill: parentcolor: "#6000FF00"  // 叠加半透明绿色层
}
(3) 多效果组合
layer.effect: MultiEffect {zoomBlurEnabled: truezoomBlurLength: 20zoomBlurCenter: Qt.point(0.5, 0.5)  // 中心点比例(Qt6特性)// 其他效果(如阴影、颜色调整)
}

7. 与其他模糊效果对比

特性ZoomBlurRadialBlurDirectionalBlur
模糊类型中心向外扩散的缩放模糊围绕中心点旋转/缩放模糊单一方向运动模糊
性能消耗中高(依赖 length中高
适用场景镜头缩放特效、焦点爆炸旋转转场、动态焦点滑动拖影、动态列表

总结

  • 核心作用:模拟镜头快速缩放时的动态模糊,增强视觉冲击力。
  • 关键参数center(焦点)、length(强度)、samples(平滑度)。
  • 适用场景:图片缩放特效、转场动画、按钮交互反馈、游戏技能特效。
  • 优化建议:在桌面端优先使用高 length 和 samples,移动端需谨慎控制性能消耗。
http://www.xdnf.cn/news/7038.html

相关文章:

  • 内核链表常用接口的一些理解
  • 2025/517学习
  • No More Adam: 新型优化器SGD_SaI
  • MySQL Workbench 工具导出与导入数据库:实用指南
  • 文件共享ftb
  • 多平台屏幕江湖生存指南
  • MongoDB聚合查询:从入门到精通
  • 现代健康生活养生指南
  • nodejs 文件的复制
  • 【人工智能】微调的艺术:将大模型塑造成你的专属智能助手
  • 大模型技术演进与应用场景深度解析
  • Type-C连接器:数字时代接口革命的终极答案
  • C语言中字符串函数的详细讲解
  • 2025年数字孪生技术最新应用案例:跨领域实践与技术趋势
  • OpenAI新发布Codex的全面解析
  • C语言输入函数对比解析
  • GPIO点亮LED
  • 使用UniApi调用百度地图API的需要注意的地方
  • 基于 jQuery 的轻量级在线画册、电子书、产品目录插件及使用
  • 粒子群算法(PSO算法)
  • RAGFlow Arbitrary Account Takeover Vulnerability
  • 广东省省考备考(第十三天5.17)—言语:中心理解题(听课后强化练习)
  • 3、ubantu系统 | 通过vscode远程安装并配置anaconda
  • C++中析构函数不设为virtual导致内存泄漏示例
  • 电子电路:电位器和可变电阻是同一个东西吗?
  • 2025年【道路运输企业安全生产管理人员】考试题库及道路运输企业安全生产管理人员考试内容
  • 获取淘宝店铺所有商品信息接口数据指南
  • JavaScript splice() 方法
  • 【C++】string的使用【上】
  • Linux面试题集合(6)