将文件从应用程序拖到资源管理器.我的应用程序可以进行复制吗?

Sim*_*rta 5 qt drag-and-drop qml qtquick2

在Qml中,我可以使用text/uri-listmime类型开始拖动,以便从我的应用程序启动复制操作到文件浏览器,例如

        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
Run Code Online (Sandbox Code Playgroud)

要么

        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
Run Code Online (Sandbox Code Playgroud)

(另请参阅Qt快速示例 - externaldraganddrop)

这很好用给定file:http:URI.

但是,我的真实数据不能作为URI使用,而是存储在数据库中.我无法快速存储到temp,因为这可能需要几秒钟,并且用户不希望在他开始拖动的那一刻有延迟.

是否有可能在删除后获取目标URI并自行复制?或者只能目标进行复制?

在后一种情况下,我是否需要通过内部HTTP服务器提供数据?我怎么知道Linux,Windows和OS X上的文件浏览器支持哪种URI方案?

Mor*_*Dev 0

我会使用类似的东西:

Drag.mimeData: { "text/uri-list": "http://localhost:8080/datarepository?id=12345" }
Run Code Online (Sandbox Code Playgroud)

然后我将在应用程序内 HTTP 服务器上提供请求的数据(然后可以轻松地12345从数据库中提取 ID 等于我的示例中的对象)...(一旦复制操作开始,我不认为如果您的用户在系统从数据库中提取对象时等待几秒钟,那将是一种耻辱)。