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