如何实现从 qt 应用程序拖放到文件系统文件夹?

Posted

技术标签:

【中文标题】如何实现从 qt 应用程序拖放到文件系统文件夹?【英文标题】:How to implement a drag'n drop from a qt application to a file system folder? 【发布时间】:2011-08-16 19:23:12 【问题描述】:

我正在 Mac OS X (Snow Leopard) 上开发一个 Qt 应用程序,它将一个大文件的数据显示到一个视图中。我可以使用菜单的“提取”条目将这些数据提取到文件系统文件夹中,现在,我想通过拖放来提取它们。

我尝试实现一个自定义的 QMimeData,它的受保护方法 retrieveData 就像这张票的解决方案:Qt 4.x: how to implement drag-and-drop onto the desktop or into a folder?)。 在这种方法中,我将数据提取到 tmp 文件夹中,并返回 tmp 文件的路径。 不幸的是,这个方法在拖放开始时被调用,并在此时提取我的数据(即使用户没有拖放这些数据)。

如何使用 Qt 拖放到 Mac OS X 上的文件系统文件夹?

【问题讨论】:

【参考方案1】:

这是 Qt 拖放方案中的一个明显问题:它不提供与 OS X 的“承诺数据”拖动等效的功能。而且真的没有很好的方法来解决它。拖动代码不知道放置的位置,因此无法在事后复制数据。正如您所发现的,在拖动开始时立即调用检索数据,这在准备数据需要很长时间时无济于事。

现在我想说用特定于平台的代码来破解它是唯一的方法。不幸的是,我没有这方面的经验。

【讨论】:

太诱人了...查看 Qt 5.5 源代码,我可以看到 qmacclipboard.mm 调用了 PasteboardSetPromiseKeeper(),但我还不知道如何利用它。跨度>

以上是关于如何实现从 qt 应用程序拖放到文件系统文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 从 QTableWidget 拖放到文件夹

为啥我不能将文件拖放到 Qt 示例拖放示例中?

需要帮助以实现从 Java 应用程序拖放到本机文件系统

将文件从操作系统拖放到 Java 应用程序 (Swing)

在拆分的 Widget PyQt Qt 中,将 Tab 从 QtabBar 拖放到其他 QtabBar

带有 Selenium 的 Python:从文件系统拖放到 webdriver?