7

一旦激活了放置目标,即使光标移动到位于原始放置目标上方的另一个放置目标,它仍然处于活动状态。

这是一个 QML 演示:尝试将文件拖放到灰色和蓝色区域。蓝色的永远不会被激活。

import QtQuick 2.1

Rectangle {
    color: "grey"
    width: 300
    height: 300

    DropArea {
        anchors.fill: parent
        onDropped: status.text = "Dropped on Grey";
    }

    Rectangle {
        color: "blue"
        anchors.fill: parent
        anchors.margins: 80

        DropArea {
            anchors.fill: parent
            # Never active!
            onDropped: status.text = "Dropped on Blue" 
        }
    }

    Text {
        x: 10
        y: 10
        id: status
        text: "Nothing dropped"
    }
}

我怎样才能实现拖放到灰色和蓝色矩形?

4

1 回答 1

3

你不能那样做,因为一旦你进入灰色区域,它就会获得焦点,并且(即使你悬停在蓝色区域)蓝色 droparea 永远不会收到事件。

您必须使蓝色区域成为灰色放置区域的子区域,但是现在,有一个新问题:蓝色区域上的 onDrop,灰色区域也可以获取事件,因此如果该事件被放置在蓝色区域,则必须阻止该事件(那就是使用 blueDrop 属性):

Rectangle {
    color: "grey"
    width: 300
    height: 300

    DropArea {
        id: greyDrop;
        property bool blueDrop: false;
        anchors.fill: parent
        onDropped: blueDrop ? blueDrop = false : status.text = "Dropped on Grey";

        Rectangle {
            color: "blue"
            anchors.fill: parent
            anchors.margins: 80

            DropArea {
                anchors.fill: parent
                onDropped: { status.text = "Dropped on Blue"; greyDrop.blueDrop = true; }
            }

        }
    }
    Text {
        id: status
        text: "Nothing dropped"
    }
}
于 2014-02-13T13:34:39.780 回答