同时使2个鼠标工作,其中一个在拖动,另一个在处理单击

时间:2018-12-06 09:48:03

标签: qt qml mousearea

我有多个可以单击的鼠标区域,在它们下面的一个可以处理拖动的鼠标区域。一切都很好,但是在单击鼠标区域之一上开始拖动的部分。我希望即使单击单击区域也可以完成拖动。这意味着,如果对单击区域之一进行小的拖动,结果将是拖动和单击均被识别。

我有一个例子:

Window {
    id: root
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    property var repeaterModel: [Qt.point(100, 100), Qt.point(100, 200), Qt.point(200, 100), Qt.point(200, 200)]

    MouseArea {
        id: dragMouseArea
        anchors.fill: parent
        onPositionChanged: {
            repeaterModel[0] = Qt.point(mouseX, mouseY)
            repeater.model = root.repeaterModel
        }
    }

    Repeater {
        id: repeater
        model: root.repeaterModel

        Rectangle {
            x: modelData.x; y: modelData.y
            width: 50; height: width
            color: "red"

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    root.repeaterModel[index] = Qt.point(0, 0)
                    repeater.model = root.repeaterModel
                }
            }
       }
    }

}

dragMouseArea只是在第一个矩形周围拖动。鼠标内部区域将单击的矩形重置为零位置。因此,如果我开始在任何矩形上拖动,拖动将不会发生。

中继器在设计上是因为dragMouseArea不能直接访问这些矩形。

我确实尝试通过几种方式将mouse.accepted设置为false,但是它们都在某个时候中断。我基本上想将所有事件从鼠标内部区域转发到dragMouseArea,同时仍然能够处理鼠标内部区域中的事件。

任何帮助表示赞赏。

0 个答案:

没有答案