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?
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. –