QML中如何实现MouseArea按下时持续执行代码 无需Timer方案
可以完全将所有逻辑内聚在MouseArea内部,无需依赖外部Timer,同时还能简化你的现有代码:
首先MouseArea本身自带只读的pressed属性,你不需要额外自定义isPressed变量,直接将内嵌Timer的运行状态和pressed属性绑定即可,实现代码如下:
MouseArea { id: myMouseArea // 位置、尺寸相关配置省略 Timer { id: repeatTriggerTimer interval: 100 // 连续执行的时间间隔,单位为毫秒 repeat: true running: myMouseArea.pressed // 直接绑定按下状态,按下自动启动、松开自动停止 onTriggered: { // 此处直接写你要连续执行的逻辑即可,无需额外判断按压状态 // updatePanel() 相关逻辑可以直接写在这里,也可以调用外部函数 } } }
这个方案相比你原来的实现性能更好:你原有方案中的全局Timer会一直重复运行,即便没有按压操作也会每隔100ms触发一次,现在只有按住MouseArea时定时器才会运行,不会产生无效的触发调用,也不需要在回调函数里额外判断按压状态。
如果你的场景需要支持「长按后才开始连续执行」(避免短按误触发连续逻辑),只需要再在内层加一个单次触发的延迟Timer即可,所有逻辑依然可以全部放在MouseArea内部。
内容的提问来源于stack exchange,提问作者rustyBucketBay
相关产品推荐
相关产品推荐

