2015-10-16 10 views
5

In Qml posso iniziare un trascinamento usando il tipo mimo text/uri-list per avviare un'azione di copia dalla mia applicazione in un file explorer, ad es.Trascina il file dall'applicazione a Explorer. La mia applicazione può fare la copia?

 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 

o

 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 

(vedi anche Qt Quick Examples - externaldraganddrop)

Questo funziona bene dato file: e http: URI.

Tuttavia i miei dati reali non sono disponibili come URI ma memorizzati in un database. Non posso archiviare rapidamente a temp perché ciò può richiedere secondi e l'utente non desidera un ritardo nel momento in cui inizia un trascinamento.

È in qualche modo possibile ottenere l'URI di destinazione dopo il rilascio e eseguire personalmente la copia? O solo il bersaglio può fare la copia?

Nel caso successivo, è necessario rendere i miei dati disponibili tramite un server HTTP interno? Come faccio a sapere quale schema URI è supportato dai browser di file su Linux, Windows e OS X?

risposta

0

vorrei usare qualcosa di simile:

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

e poi ti mettono a disposizione i dati richiesti su un server HTTP in-applicazione (che quindi può facilmente estrarre l'oggetto con ID pari a 12345 nel mio esempio da DB) ... (una volta avviata l'operazione di copia, non penso che sia un peccato se il tuo utente aspetta qualche secondo mentre il sistema estrae l'oggetto dal DB).

+0

Ebbene sì, se non c'è davvero un modo migliore, questo deve essere fatto. I dati possono anche essere trasmessi dal database al server HTTP in modo che non ci sia alcuna attesa. Penso che aggiungerò un blogpost dettagliato sulla mia implementazione, se ho finito. Fino ad allora spero ancora in un trucco più semplice. –

Problemi correlati