将文件从应用程序拖到资源管理器。我的应用程序可以复制吗?
Posted
技术标签:
【中文标题】将文件从应用程序拖到资源管理器。我的应用程序可以复制吗?【英文标题】:Drag file from application to explorer. Can my application do the copying? 【发布时间】:2016-01-15 10:00:32 【问题描述】:在 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 方案?
【问题讨论】:
【参考方案1】:我会使用类似的东西:
Drag.mimeData: "text/uri-list": "http://localhost:8080/datarepository?id=12345"
然后我将在应用程序内 HTTP 服务器上提供请求的数据(然后可以轻松地从 DB 中提取 ID 等于 12345
在我的示例中的对象)...(一旦复制操作如果您的用户在系统从数据库中提取对象时等待几秒钟,我不认为这是一种耻辱)。
【讨论】:
嗯,是的,如果真的没有更好的办法,就必须这样做。数据甚至可以从数据库流式传输到 HTTP 服务器,因此根本无需等待。如果我完成了,我想我会在我的实现上添加一个详细的博文。在那之前,我仍然希望有一个更简单的技巧。以上是关于将文件从应用程序拖到资源管理器。我的应用程序可以复制吗?的主要内容,如果未能解决你的问题,请参考以下文章