2016-12-02 49 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

相關問題