C++ Qt拖放到windows资源管理器:如何知道拖放的目标路径

C++ Qt拖放到windows资源管理器:如何知道拖放的目标路径,c++,qt,drag-and-drop,C++,Qt,Drag And Drop,我试图做的是显示在线文件的列表视图,就像FTP客户端列出FTP服务器上的所有文件一样,可以将任何一行或多行拖动到任何本地文件夹,将拖动的文件保存在那里 我计划通过以下步骤来实现这一点: 初始化拖动事件,并在服务器上保存选定文件的路径[完成] 子类QMimeData类,并按照此线程的建议覆盖retrieveData函数[done] 只需完成拖放过程,找到拖放的目标路径,比如C:\somefolder\subfolder,然后在那里下载所有文件,工作完成。【未完成】 但我找不到任何地方可以获得删除的

我试图做的是显示在线文件的列表视图,就像FTP客户端列出FTP服务器上的所有文件一样,可以将任何一行或多行拖动到任何本地文件夹,将拖动的文件保存在那里

我计划通过以下步骤来实现这一点:

  • 初始化拖动事件,并在服务器上保存选定文件的路径[完成]
  • 子类QMimeData类,并按照此线程的建议覆盖retrieveData函数[done]
  • 只需完成拖放过程,找到拖放的目标路径,比如C:\somefolder\subfolder,然后在那里下载所有文件,工作完成。【未完成】
  • 但我找不到任何地方可以获得删除的目的地路径,即使是通过处理dragEnter\dragMove\dragLeave\drop事件也不行。我也做了大量的谷歌搜索,发现了一些类似的问题,但从来没有任何可靠的答案


    请解释一下。这个解决方案在QT上可行吗?我应该如何获得目的地路径,或者是否有其他方法来实现此目标?

    对于正在搜索此路径的任何人,我可能会找到答案,但这并不容易,可能取决于平台

    经过大量的(字面上的)搜索,我在源代码中找到了一个解决方案,结果证明,为了应对这种情况,您需要:

  • 您需要一个shell扩展来监视(或其他)拖动过程
  • 开始正常的拖放操作
  • 当鼠标被放下时,什么也不做,让整个拖放过程结束
  • 通过shell扩展,您可以获得实际的目标路径,并在那里下载文件 有关技术细节,请访问plz


    我想这只适用于windows,如果有人得到其他平台的答案,请告诉我

    Windows不提供任何方法来发现丢弃的目标。它确实提供了一种执行的方式。我敢肯定,单靠Qt是无法做到这一点的,你必须直接使用Windows API。@IgorTandetnik谢谢你的回答,我相信iSyncoperation可能能够实现我想要的,但我选择了另一种方式。我只是将一些不存在的文件作为url列表提供给拖动事件,以便拖动看起来正在发生。当然,当删除时,不会发生任何事情,因为文件url列表是假的。我只是在drop位置找到窗口HWND,并尝试找到它的路径[],然后在那里下载我的文件。这当然很愚蠢,但对我来说更容易实现……如果我点击文件夹图标(因此文件应该进入的文件夹与“打开的资源管理器”窗口不同),会发生什么情况?或者在一个打印机图标上(我想,在这种情况下,资源管理器会想先放到一个临时目录下)?@IgorTandetnik hmmmmm,很好的问题,我还没想过。那我就坚持我的语法!谢谢你,伙计。请将您的评论作为答案发布,以便我标记它。如果我有什么结果,我会带着我的结果回来。@IgorTandetnik事实上,我读过,我不认为这是答案。在异步场景中,[Drop Target]决定何时启动操作,而我的应用程序[Drop Source]无法控制整个过程。它带来的唯一好处是解除对源和目标的阻止,这不符合我的场景,即[Drop source],我的应用程序在被删除时,将首先从web服务器下载被拖动的文件,这可能需要几个小时,然后我告诉[Drop target],现在可以复制文件,在此之前,[Drop target]应该在后台等待。