(Windows上的QtQuick 2.12(
我试图拖动一些不可见的东西,并利用我正在拖动的DropArea
中的keys属性和Item
中的Drag.keys
属性。如果DropArea
有一个空键,它就会生成事件,但如果我在其中放入任何东西,它根本不会响应,即使拖动的Item
有匹配的键。
这是Mybutton.qml
:
import QtQuick 2.12
Rectangle {
height: 100
width: 100
color: "white"
property var keys: []
DropArea {
anchors.fill: parent
keys: parent.keys
onEntered: console.log("entered", keys)
onExited: console.log("exited", keys)
onDropped: console.log("dropped", keys)
}
MouseArea {
id: mouse
anchors.fill: parent
drag.target: message
onPressed: {
message.x = parent.x + mouse.x
message.y = parent.y + mouse.y
message.keys = parent.keys
message.Drag.active = Qt.binding(
function() { return drag.active })
}
}
}
这是main.qml
:
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 400
height: 400
title: qsTr("TestDrag")
color: "black"
Item {
id: message
width: 1
height: 1
property var keys: []
Drag.keys: keys
Drag.dragType: Drag.Automatic
Drag.onDragStarted: console.log("started", Drag.keys)
Drag.onDragFinished: console.log("finished", dropAction)
onXChanged: console.log(x, y)
}
MyButton { x: 50; y: 50; keys: [ "top", "left" ] }
MyButton { x: 250; y: 50; keys: [ "top", "right" ] }
MyButton { x: 50; y: 250; keys: [ "bottom", "left" ] }
MyButton { x: 250; y: 250; keys: [ "bottom", "right" ] }
}
这会产生四个正方形,我应该能够将任何一个拖动到相邻的正方形上,但不能拖动到对面的角上,因为它不共享任何关键点。但我不能把任何事情拖到任何事情上。如果我注释掉其中一个按钮上的键,那么我显然可以把其他任何一个放在上面,证明看不见的Item
实际上被拖到了我认为的地方。
文件很不清楚,所以我想我可能做错了什么。但是什么?
或者,如果我不想拖动实际的视觉项目,有没有更简单的拖放方法?我只想让光标根据它是否在可以放下的东西上而改变形状。
对于后面的接口Drag.Automatic
和startDrag()
,请使用Drag.mimeData
而不是Drag.keys
。
如果你不想拖动来移动任何东西,你可以使用以下项目:
MouseArea{
Drag.mimeData: { 'someKey': '' }
onPressed: { Drag.active = true; Drag.startDrag(); }
}
DropArea{ keys: ['someKey'] }
也被这件事难住了,通过使用real的答案,意识到在这种情况下"someKey"是DropArea使用的密钥,如果需要,仍然可以向拖动操作添加额外的数据,比如:
MouseArea{
Drag.dragType: Drag.Automatic
Drag.mimeData: {
'someKey': '',
'text/plain': "test_string"
}
onPressed: { Drag.active = true; Drag.startDrag(); }
}
DropArea{
keys: 'someKey'
onDropped: {
if (drop.hasText) {
console.log("Drop Keys: " + drop.keys)
console.log("Drop Text: " + drop.text)
}
}
}
输出:
Drop Keys: someKey,text/plain
Drop Text: test_string