2016-12-02 47 views
1

我正试图在QML中实现基本的拖放操作。在功能上,它的工作原理 - 我可以拖动一个字符串。但是,我无法让我的可拖动Rectangle对象跟随光标。它将矩形的x和y正确设置为可见的框架,但是它保持静止而不是用鼠标移动。这是我的代码:可拖动的项目不能在QML中工作

MouseArea { 
    id: mouseArea 
    anchors.fill: parent 
    drag.target: draggable 
} 

Rectangle { 
    id: draggable 
    height: 18 
    width: dragText.width + 8 
    clip: true 
    color: "#ff333333" 
    border.width: 2 
    border.color: "#ffaaaaaa" 
    visible: false 
    anchors.verticalCenter: parent.verticalCenter 
    anchors.horizontalCenter: parent.horizontalCenter 

    Drag.active: mouseArea.drag.active 
    Drag.hotSpot.x: 0 
    Drag.hotSpot.y: 0 
    Drag.mimeData: { "text/plain": "Teststring" } 
    Drag.dragType: Drag.Automatic 
    Drag.onDragStarted: { 
     visible = true 
    } 
    Drag.onDragFinished: { 
     visible = false 
    } 

    Text { 
     id: dragText 
     x: 4 
     text: "Teststring" 
     font.weight: Font.Bold 
     color: "#ffffffff" 
     horizontalAlignment: Text.AlignHCenter 
    } 
} 
+0

你打算在这里做什么?你是否尝试用'visible:false'拖动一个项目? – folibis

+0

不,我在拖动开始时立即将项目设置为可见(请参阅Drag.onDragStarted)。 – user1765354

+0

拖动隐形物品有什么意义?你的目标是什么?也许这可以用另一种方式来完成。 – folibis

回答

0

我最终解决了这个问题,完全避免了Draggable框架,基本上只是使用解决方法。我增加了以下我的鼠标区域,使矩形走动正常:

onMouseXChanged: { 
    draggable.x = mouseX - draggable.width/2 
} 
onMouseYChanged: { 
    draggable.y = mouseY - draggable.height/2 
} 

要模拟下降功能,编程方式计算出的位置“落区”,它比较有基本的碰撞检测鼠标的位置,然后附加到附加到“放置区域”的ListView。

1

由于您将锚设置为您的矩形,因此您的矩形不会移动。锚定件应该固定在锚定点上。

删除

anchors.verticalCenter: parent.verticalCenter 
anchors.horizontalCenter: parent.horizontalCenter 

在QML。

如果你想放置在父母的心,你就需要设置像这样代替:

x: parent.width/2 - this.width/2 
y: parent.height/2 - this.height/2 

您可能还希望如果矩形删除

Drag.dragType: Drag.Automatic 

应该跟随你的光标,而不是仅仅在拖动结束后移动。

+0

谢谢!对不起,没有足够的声望来upvote。 – user1765354

+0

所以,我仍然有一些问题。当我删除Drag.dragType:Drag.Automatic时,矩形正确地移动,但“拖动”状态从不碰撞。因此,我必须在实际拖动文本(功能)与使用光标移动的矩形(可视化)之间进行选择。我喜欢两者。 – user1765354

相关问题