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

如何禁用QML GridView元素的拖拽回弹动画

解决GridView拖拽Delegate回弹问题

针对你遇到的拖拽GridView内Delegate时元素移动后回弹的问题,有两种可行方案,根据你的需求选择:

方案一:禁用GridView的交互滚动(不需要滚动时用)

如果你的GridView内容不需要滚动展示,直接给GridView添加interactive: false属性,彻底禁用其拖拽/滚动交互:

GridView {
    id: stepListGrid
    anchors.fill: parent
    anchors.leftMargin: 42
    anchors.topMargin: 73
    model: stepList
    cellHeight: 31
    cellWidth: 164
    interactive: false // 新增这一行
    delegate: Rectangle {
        // 原Delegate代码不变
    }
}

方案二:保留滚动,阻止Delegate触发GridView拖拽(需要滚动时用)

如果需要保留GridView的滚动功能,只需在Delegate内部添加MouseArea并拦截触摸事件,不让事件传递给父级GridView:

delegate: Rectangle {
    id: rectfor
    width: 158
    height: 31
    color: "transparent"
    radius: 20

    // 新增MouseArea拦截事件
    MouseArea {
        anchors.fill: parent
        propagateComposedEvents: false
        
        onClicked: {
            // 这里可以添加按钮点击的业务逻辑
            mouse.accepted = true
        }
        onPressed: mouse.accepted = true
        onReleased: mouse.accepted = true
    }

    Text {
        color: "#4A4A4A"
        text: name
        font.family: "SF Pro Text"
        font.weight: 500
        font.pixelSize: 11
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.top: parent.top
        anchors.topMargin: 9
        z: 999
    }

    Image {
        id: stepListBackground
        anchors.fill: parent
        source: src
    }
}

原理:默认情况下,触摸Delegate的事件会传递给父级GridView(继承自Flickable),触发其拖拽滚动逻辑;通过MouseArea拦截事件并标记为已处理,就能避免触发GridView的拖拽回弹效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:45:37