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

QML 鼠标穿透

事件:
有一个输入框(TextField),需要实现鼠标悬浮时改变边框颜色,鼠标移出后恢复原来边框颜色;
这时如果需要实现此功能,就得使用到MouseArea,鼠标操作区域填充满整个TextField。
然后实现鼠标移入移入出的修改边框颜色的效果,具体实现代码:

TextField {id: pwdTextFieldwidth: 400height: 40font.pixelSize: height / 2placeholderText: "请输入密码"            // 背景提示文本placeholderTextColor: "#303037"         // 提示文本颜色verticalAlignment: Text.AlignVCenter    // 文本垂直居中anchors.centerIn: parentbackground: Rectangle {anchors.fill: parentradius: pwdTextField.height / 2color: "#CCFFFF"border.width: 1border.color: pwdTextField.focus ? "#FF66FF" : "#222"MouseArea {anchors.fill: parent		// 鼠标区域填充满整个TextFieldhoverEnabled: true			// 启用鼠标悬浮追踪onEntered: {				// 鼠标进入parent.border.color = "#FF66FF"}onExited: {					// 鼠标移出parent.border.color = pwdTextField.focus ? "#FF66FF" : "#222"}}}
}

但是,此时就出现问题了,鼠标区域会覆盖TextField,使得TextField无法输入文本了
在这里插入图片描述
鼠标移入实现边框颜色改变,移出恢复功能确实已经实现了,但是,输入框无法输入文本了…

原因就是设置MouseArea时将TextField给遮住了;

解决问题的方案就是鼠标穿透!将MouseArea的点击事件穿透传给父控件,即TextField;

在MouseArea加入两行代码:

propagateComposedEvents: true     
onPressed: { mouse.accepted = false } 

在这里插入图片描述
代码加上后,运行TextField可以正常输入文本了!

最后再优化一下,鼠标指针进入后,修改一下:

Window {id: rootvisible: truewidth: 600height: 400title: qsTr("Hello World")TextField {id: pwdTextFieldwidth: 400height: 40font.pixelSize: height / 2placeholderText: "请输入密码"            // 背景提示文本placeholderTextColor: "#303037"         // 提示文本颜色verticalAlignment: Text.AlignVCenter    // 文本垂直居中anchors.centerIn: parentbackground: Rectangle {anchors.fill: parentradius: pwdTextField.height / 2color: "#CCFFFF"border.width: 1border.color: pwdTextField.focus ? "#FF66FF" : "#222"MouseArea {anchors.fill: parent        // 填充满父控件hoverEnabled: true// 鼠标穿透,按下事件不接收,传递给父控件propagateComposedEvents: trueonPressed: {mouse.accepted = false}onEntered: {parent.border.color = "#FF66FF"cursorShape = Qt.IBeamCursor}onExited: {parent.border.color = pwdTextField.focus ? "#FF66FF" : "#222"cursorShape = Qt.ArrowCursor}}}}
}

在这里插入图片描述

http://www.xdnf.cn/news/17357.html

相关文章:

  • dokcer 容器里面安装vim 编辑器
  • 【lucene】HitsThresholdChecker命中阈值检测器
  • 闲鱼智能监控机器人:基于 Playwright 与 AI 的多任务监控分析工具
  • PNPM总结
  • 面向软件定义汽车的确定性以太网网络解决方案
  • day 36_2025-08-09
  • 【线性代数】其他
  • 【2025】Datawhale AI夏令营-多模态RAG-Task1、Task2笔记-任务理解与Baseline代码解读
  • 我想做自动化报社保,用哪种技术更好一点呢?
  • ✨ 基于 JsonSerialize 实现接口返回数据的智能枚举转换(优雅告别前端硬编码!)
  • 【攻防实战】从外到内全链路攻防实战纪实
  • 一周学会Matplotlib3 Python 数据可视化-网格 (Grid)
  • React Native jpush-react-native极光推送 iOS生产环境接收不到推送
  • linux安装php
  • kafka架构原理快速入门
  • Office安装使用?借助Ohook开源工具?【图文详解】微软Office产品
  • 【解决方法】华为电脑的亮度调节失灵
  • 华为实验:SSH
  • 时间序列处理:从“杂乱数据”到“趋势预测”,3步解锁时间的秘密
  • stm32项目(25)——基于stm32的植物生长箱环境监测系统
  • 微软推出革命性AI安全工具Project IRE,重塑网络安全防御新范式
  • ToB大型软件可靠性测试方案
  • 基于Dify实现对Excel的数据分析--动态配置图表
  • Flutter 视频播放video_player、chewie
  • 欧拉公式的意义
  • 管家婆软件固定资产管理常见问答
  • 自动化一键部署 LNMP 环境
  • 深度学习入门Day8:生成模型革命——从GAN到扩散模型
  • 如何优雅的使用进行参数校验
  • Day02 员工管理,分类管理