Qt QML:MouseArea中onPositionChanged中断时如何检测该中断?
解决MouseArea中onPositionChanged中断时无法触发onExited的判断问题
先整理你提供的QML代码(已修正重复设置drag.maximumY的错误):
MouseArea { drag.target: targetA drag.minimumX: 22 drag.maximumX: 40 drag.minimumY: 22 drag.maximumY: 50 onPositionChanged: { console.log("onPositionChanged.....") } onExited: { console.log("Exited") } }
要判断onPositionChanged的中断事件,可以通过以下方式实现:
- 监听
drag.active属性变化,结合containsMouse识别中断场景drag.active在拖拽过程中为true,当拖拽被中断(比如触达拖拽边界强制停止、外部事件打断)时,该属性会变为false。此时如果containsMouse仍为true,说明鼠标未离开MouseArea,拖拽停止是中断导致而非鼠标退出。
修改后的代码示例:
MouseArea { drag.target: targetA drag.minimumX: 22 drag.maximumX: 40 drag.minimumY: 22 drag.maximumY: 50 onPositionChanged: { console.log("onPositionChanged.....") } onExited: { console.log("Exited") } onDragActiveChanged: { if (!drag.active && containsMouse) { console.log("拖拽操作已中断") } } }
- 额外说明:原代码重复设置
drag.maximumY会导致Y轴拖拽最小值未定义,修正为drag.minimumY:22后才能保证拖拽范围的完整性。
内容的提问来源于stack exchange,提问作者3088 K
相关产品推荐
相关产品推荐

