You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QML中按下ESC取消DragHandler拖拽并重置位置?

解决方案

要实现拖拽过程中按ESC键重置位置并取消拖拽,你可以通过以下步骤实现:

  • 记录拖拽开始时目标对象的初始位置
  • 监听ESC快捷键,触发时恢复目标位置并终止DragHandler的拖拽状态

修改后的完整代码如下:

import QtQuick 2.14
import QtQuick.Controls 2.14

Window {
    width: 1280
    height: 768
    visible: true

    // 存储拖拽起始位置
    property real startX: 0
    property real startY: 0

    Rectangle {
        id: rectangle
        x: 100; y: 100
        width: 100; height: 100
        color: "red"
    }

    DragHandler {
        id: dragHandler
        target: rectangle

        // 拖拽激活时记录初始位置
        onActiveChanged: {
            if (active) {
                startX = rectangle.x
                startY = rectangle.y
            }
        }
    }

    Shortcut {
        sequence: "Escape"
        onActivated: {
            // 仅在拖拽进行中触发
            if (dragHandler.active) {
                // 恢复初始位置
                rectangle.x = startX
                rectangle.y = startY
                // 取消当前拖拽操作
                dragHandler.cancelDrag()
            }
        }
    }
}

关键说明:

  1. 初始位置记录:利用DragHandler的activeChanged信号,在拖拽开始(active变为true)时保存矩形的初始坐标。
  2. ESC快捷键处理:在快捷键激活时,先判断拖拽是否处于活跃状态,若活跃则重置矩形位置,再调用DragHandler的cancelDrag()方法终止拖拽,释放鼠标抓取。

内容的提问来源于stack exchange,提问作者Foaly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:46:09