Qt QML-防止鼠标earea的位置更改信号在ScrollView中传播

Qt QML-防止鼠标earea的位置更改信号在ScrollView中传播,qt,qml,Qt,Qml,这篇文章是我已经在Qt论坛上发送的一条消息的副本,但我无法得到答案。 您可以在此处找到原始帖子: 如果链接已断开,则所有内容都将复制到下面: 我试图在鼠标earea中处理位置更改信号,以创建一种滚动视图中的拖放效果 我的问题是,鼠标移动一小段距离后,父ScrollView似乎要获得焦点,滚动条出现,我停下来接收位置更改信号 目标是接收位置更改信号,即使鼠标离开我的鼠标ea&在ScrollView上,只要我的鼠标左键保持按下,而不将信号传播到ScrollView 我有3个单独的例子。这是一个简单的

这篇文章是我已经在Qt论坛上发送的一条消息的副本,但我无法得到答案。 您可以在此处找到原始帖子:

如果链接已断开,则所有内容都将复制到下面:

我试图在鼠标earea中处理位置更改信号,以创建一种滚动视图中的拖放效果

我的问题是,鼠标移动一小段距离后,父ScrollView似乎要获得焦点,滚动条出现,我停下来接收位置更改信号

目标是接收位置更改信号,即使鼠标离开我的鼠标ea&在ScrollView上,只要我的鼠标左键保持按下,而不将信号传播到ScrollView

我有3个单独的例子。这是一个简单的QML应用程序,应该很容易运行。 前两个例子很有效。第三个不起作用

工作原理:

在鼠标上按下鼠标键A 在不松开按钮的情况下移动鼠标 记录坐标的消息永远不会停止打印,无论您在屏幕上的什么位置,直到您松开鼠标按钮。 对于第三个示例,我获取日志,直到鼠标移动过多,所有更新停止

只有ScrollView有效 只有柱状图才有效 ScrollView中的ColumnLayout不起作用 您可以在此处找到该行为的视频:

我在不移动的情况下按下并释放鼠标:我正确获得按下和释放的事件 我按下并移动鼠标:我得到按下事件,移动事件,然后它停止。不再移动或释放事件。 我按住并移动鼠标,但不要离开按下鼠标的位置太远:它会一直工作到我走得太远 注意:我没有获得任何已发布或已退出的事件,但containsPressed属性已正确更新,即:当我不再接收事件时,其值为false。这是我用来显示鼠标按下文本的属性。
这是我对ScrollView/ColumnLayout组合的错误还是一个Qt错误?

在第三个示例中,将此添加到您的鼠标earea中:

    preventStealing: true
有关更多信息,请参阅:

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

ApplicationWindow{
    id: root
    visible: true
    width: 1200
    height: 600

    ColumnLayout {
        MouseArea {
            width: 300
            height: 300

            onPositionChanged: {
                console.log('Moved', mouseX, mouseY)
            }
        }
    }
}
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

ApplicationWindow {
    id: root
    visible: true
    width: 1200
    height: 600

    ScrollView {
        clip: true
        anchors.fill: parent

                // note: It does not work for ColumnLayout, Column, Row or RowLayout. If I use a Item here, it works
        ColumnLayout {
            MouseArea {
                width: 300
                height: 300

                onPositionChanged: {
                    console.log('Moved', mouseX, mouseY)
                }
            }
        }
    }
}
    preventStealing: true