2015-10-16 3 views
5

In Qml kann ich einen Ziehvorgang unter Verwendung des Mime-Typs text/uri-list starten, um eine Kopieraktion von meiner Anwendung in einen Datei-Explorer zu starten, z.Ziehen Sie die Datei von der Anwendung zum Explorer. Kann meine Anwendung das Kopieren durchführen?

 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 

oder

 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 

(siehe auch Qt Quick Examples - externaldraganddrop)

Das funktioniert file: und http: URIs in Ordnung gegeben.

Allerdings sind meine realen Daten nicht als URI verfügbar, aber in einer Datenbank gespeichert. Ich kann nicht schnell nach Temp speichern, da das Sekunden dauern kann und der Benutzer keine Verzögerung in dem Moment wünscht, in dem er einen Drag startet.

Ist es irgendwie möglich, den Ziel-URI nach dem Ablegen zu bekommen und das Kopieren selbst zu machen? Oder kann nur das Ziel das Kopieren machen?

Muss ich meine Daten im letzteren Fall über einen internen HTTP-Server zur Verfügung stellen? Woher weiß ich überhaupt, welches URI-Schema von den Dateibrowsern unter Linux, Windows und OS X unterstützt wird?

Antwort

0

würde ich so etwas wie verwenden:

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

und dann werde ich die angeforderten Daten auf einen in-Anwendung HTTP-Server zur Verfügung stellen (das dann leicht das Objekt mit der ID gleich 12345 in meinem Beispiel extrahieren von DB) ... (nachdem der Kopiervorgang gestartet wurde, glaube ich nicht, dass es eine Schande ist, wenn Ihr Benutzer einige Sekunden wartet, während das System das Objekt aus der DB extrahiert).

+0

Nun ja, wenn es wirklich keinen besseren Weg gibt, muss dies getan werden. Daten können sogar von der Datenbank in den HTTP-Server gestreamt werden, so dass überhaupt keine Wartezeiten entstehen. Ich denke, ich werde einen detaillierten Blogpost zu meiner Implementierung hinzufügen, wenn ich fertig bin. Bis dahin hoffe ich immer noch auf einen einfacheren Trick. –

Verwandte Themen