2015-10-16 10 views
5

Qmlでは、アプリケーションからファイルエクスプローラへのコピーアクションを開始するために、text/uri-list mimeタイプを使用してドラッグを開始できます。ファイルをアプリケーションからエクスプローラにドラッグします。私のアプリケーションはコピーを行うことはできますか?

 Item { 
      id: draggable 
      anchors.fill: parent 
      Drag.active: mouseArea.drag.active 
      Drag.hotSpot.x: 0 
      Drag.hotSpot.y: 0 
      Drag.mimeData: { "text/uri-list": "file:///home/myname/Desktop/avatar.jpeg" } 
      Drag.supportedActions: Qt.CopyAction 
      Drag.dragType: Drag.Automatic 
      Drag.onDragStarted: { } 
      Drag.onDragFinished: { 
       console.log("Time to copy") 
      } 
     } // Item 

または

 Item { 
      id: draggable 
      anchors.fill: parent 
      Drag.active: mouseArea.drag.active 
      Drag.hotSpot.x: 0 
      Drag.hotSpot.y: 0 
      Drag.mimeData: { "text/uri-list": "https://farm1.staticflickr.com/713/21777111068_e3310cfb94_k.jpg" } 
      Drag.supportedActions: Qt.CopyAction 
      Drag.dragType: Drag.Automatic 
      Drag.onDragStarted: { } 
      Drag.onDragFinished: { 
       console.log("Time to copy") 
      } 
     } // Item 

(もQt Quick Examples - externaldraganddrop参照)

これは罰金与えfile:http: URIを動作します。

私の実際のデータはURIとしては利用できませんが、データベースに保存されています。私はすぐに一時的に保存することができません。これは数秒かかる可能性があり、ユーザーはドラッグを開始する瞬間に遅延を望んでいないからです。

ドロップ後にターゲットURIを取得して自分でコピーすることは何とかできますか?または、ターゲットだけがコピーを実行できますか?

後者の場合、内部HTTPサーバー経由でデータを利用できるようにする必要はありますか?どのURIスキームがLinux、Windows、OS X上のファイルブラウザでサポートされているかを知るにはどうすればよいですか?

答えて

0

私のようなものを使用します:

Drag.mimeData: { "text/uri-list": "http://localhost:8080/datarepository?id=12345" } 

をして、私は、簡単に私の例では12345に等しいIDを持つオブジェクトを抽出できること(アプリケーション内のHTTPサーバー上の要求されたデータを利用できるようにしますDBから)...(コピー操作が開始されたら、システムがDBからオブジェクトを抽出している間にユーザーが数秒待っているとは思わない。

+0

本当に良い方法がない場合は、これを行う必要があります。データをデータベースからHTTPサーバにストリーミングすることもできるので、待機する必要はありません。完了したら私の実装に詳細なブログポストを追加すると思います。それまでは、私はまだ簡単なテクニックを望んでいます。 –

関連する問題