QDropEvent从临时文件夹复制临时文件

时间:2019-01-27 01:09:41

标签: qt

在Windows上的Qt应用程序中,我有一个小部件,用作从其他应用程序中拖出的文件或文件夹的拖放目标。当窗口小部件从MIME获取放下动作和路径时,它将复制文件并以某种方式处理它们。在复制普通文件或文件夹(例如从Windows资源管理器或Total Commander。接受使用例如直接从存档中提取的文件也很好。 7Z(7zip)。当我在7Z应用程序中打开存档并将其拖放到我的窗口小部件上时,该窗口小部件会收到QDropEvent的动作Qt::CopyAction,MIME格式("text/uri-list")和路径向量(URI)。问题是路径指向..../AppData/Local/Temp/....etc.中某个临时文件夹,并且在我设法处理文件之前,有人(我假设7Z)会立即删除它们。我不知道如何获得更多时间来处理它们或与拖动源进行通信以不删除它们。似乎其他一些作为放置目标的程序可以很好地解决此问题-例如Windows Explorer或Total Commander可以用作7Z的放置目标,没有任何问题。任何想法,他们如何做?在Qt应用程序中可以做到吗?

更新: 我发现,直到我的应用程序的事件循环没有完成drop事件的处理(无论我是否调用event->acceptProposedAction()),提取的临时文件才会被删除。因此,如果我将处理事件处理程序中的所有文件,那就很好了。但是处理(甚至复制大文件)需要时间,并且在主线程中执行它会阻塞GUI,因此我在另一个线程中执行。这意味着将比其他线程更早地处理事件并通知7Z。有什么方法可以推迟完成处理该drop事件的操作,即推迟对7Z的响应吗?

0 个答案:

没有答案
相关问题