QML从抽屉拖动到另一个项目,当抽屉关闭时如何保持连续拖动

时间:2018-12-05 22:21:51

标签: qt qml qt5

我的目标是将item的副本从drawer拖放到另一个item上。按住item时,我将创建一个新的Rectangle并将其重新设置为新的parent并将其设置为drag.target 当我越过close()的边界时,我想drawer drawer。 我的问题是我无法控制拖动的item。即使调用了item,如何仍能拖动drawer.close()。 这是一个工作示例:

import QtQuick 2.4
import QtQuick.Controls 2.1

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

        Drawer{
            id:drawer
            width: 0.5 * parent.width
            height: parent.height
            edge: Qt.RightEdge

            Rectangle {
                id: item
                border.width: 2
                x: 100
                y: 100
                width: 100
                height: 100


                MouseArea {
                    id: mouseArea
                    anchors.fill: parent

                    onPressAndHold: {
                        var newItem = createShadow(item)
                        newItem.parent = root
                        drag.target = newItem

                    }
                    onMouseXChanged: {
                        //hard coding the cursor crossing the drawer boundary
                        var point = mapToItem(root, mouseX, mouseY)
                        if (point.x < 300)
                            drawer.close()
                    }

                    onReleased: {
                        drag.target.Drag.drop()
                    }
                }
            }
        }

        DropArea {
            anchors.fill: parent
            onDropped: {
                //do something
            }
        }
    }

    function createShadow(itm) {
        //assuming we are fetching geometry from itm
        var component = Qt.createQmlObject('import QtQuick 2.4; Rectangle{x:400;y:100;width:100;height:100;opacity:0.2;color:"black"}',root, "asdf");

        return component
    }
}

1 个答案:

答案 0 :(得分:1)

在拖动过程中,您还应该重新设置MouseArea的父级,以便继续接收onMouseXChanged事件:

onPressAndHold: {
    var newItem = createShadow(item)
    newItem.parent = root
    drag.target = newItem
    parent = root
}
// ...
onReleased: {
    drag.target.Drag.drop()
    parent = item
}