W Qml mogę rozpocząć przeciąganie przy użyciu mime typu text/uri-list
, aby rozpocząć działanie kopiowania z mojej aplikacji do eksploratora plików, np.Przeciągnij plik z aplikacji do eksploratora. Czy moja aplikacja może kopiować?
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
lub
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
(patrz także Qt Quick Examples - externaldraganddrop)
to działa prawidłowo podano file:
i http:
URI.
Jednak moje prawdziwe dane nie są dostępne jako URI, ale są przechowywane w bazie danych. Nie mogę szybko zapisać do temp, ponieważ może to zająć sekundy, a użytkownik nie chce opóźnienia w momencie, gdy zaczyna przeciągać.
Czy w jakiś sposób można uzyskać docelowy identyfikator URI po upuszczeniu i samemu wykonać kopię? Czy tylko cel może wykonać kopiowanie?
Czy w późniejszym przypadku muszę udostępnić swoje dane za pośrednictwem wewnętrznego serwera HTTP? Jak mogę się dowiedzieć, który schemat URI jest obsługiwany przez przeglądarki plików w systemach Linux, Windows i OS X?
Cóż, tak, jeśli naprawdę nie ma lepszego sposobu, to trzeba to zrobić. Dane można nawet przesyłać strumieniowo z bazy danych do serwera HTTP, więc nie trzeba czekać. Myślę, że dodam szczegółowy blog na temat mojej implementacji, jeśli skończę. Do tego czasu wciąż mam nadzieję na prostszą sztuczkę. –