在Qml中,我可以使用text/uri-list
mime类型开始拖动,以便从我的应用程序启动复制操作到文件浏览器,例如。
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
或
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
(另见Qt Quick Examples - externaldraganddrop)
这适用于file:
和http:
URI。
但是我的真实数据不能作为URI使用,而是存储在数据库中。我无法快速存储到temp,因为这可能需要几秒钟,用户不希望在他开始拖动的那一刻出现延迟。
是否有可能在删除后获取目标URI并自行复制?或者只能让目标进行复制?
在后一种情况下,我是否需要通过内部HTTP服务器提供数据?我怎么知道Linux,Windows和OS X上的文件浏览器支持哪种URI方案?
答案 0 :(得分:0)
我会使用类似的东西:
Drag.mimeData: { "text/uri-list": "http://localhost:8080/datarepository?id=12345" }
然后我将在应用程序内的HTTP服务器上提供所请求的数据(然后可以从DB中轻松提取我的示例中ID等于12345
的对象)...(一次)复制操作已经开始我不认为如果你的用户在系统从数据库中提取对象时等待几秒钟,这是一种耻辱。)