2016-12-02 18 views
1

QMLで基本的なドラッグアンドドロップを実装しようとしています。機能的には、それは動作します - 私は文字列をドラッグすることができます。しかし、ドラッグ可能なRectangleオブジェクトをカーソルに追従させることはできません。これは、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フレームワークを完全に避けて、基本的に回避策を使用してこれを解決しました。私は長方形が適切に動き回る作るために私のMouseAreaに次を追加しました:

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

機能を落とすエミュレートするために、私はプログラム的に初歩的な衝突検出とマウスの位置にそれを比較する「エリアをドロップ」の位置を計算し、 「ドロップ領域」にアタッチされているListViewに追加します。

1

あなたの長方形は、動いていません。アンカーは、アンカーポイントに固定されるように意図されている。

あなたのQMLで

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

を削除します。

あなたは親の中央に配置したい場合は、代わりにこのようにそれを設定する必要があります:

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

関連する問題