gpt4 book ai didi

c++ - Qt 4.x : how to implement drag-and-drop onto the desktop or into a folder?

转载 作者:IT老高 更新时间:2023-10-28 22:04:57 27 4
gpt4 key购买 nike

我使用 Qt 4.x 编写了一个用 C++ 编写的小文件传输应用程序……它登录到服务器,向用户显示服务器上可用的文件列表,并让用户上传或下载文件.

这一切都很好;您甚至可以从桌面(或打开的文件夹)拖入文件,当您将文件图标拖放到服务器文件 ListView 中时,拖放的文件会上传到服务器。

现在我也请求执行相反的操作...我的用户希望能够将文件从服务器文件 ListView 中拖到桌面上,或者拖到打开的文件夹窗口中,并将该文件下载到该位置。

这似乎是一个合理的要求,但我不知道如何实现它。当图标被拖放到桌面或打开的文件夹窗口时,Qt 应用程序是否有办法找出与“放置事件”发生的位置相对应的目录?理想情况下,这将是一种基于 Qt 的平台中立机制,但如果不存在,那么适用于 MacOS/X 和 Windows(XP 或更高版本)的特定于平台的机制就足够了。

有什么想法吗?

最佳答案

查看QMimeData及其文档,它有一个虚函数

virtual QVariant retrieveData  ( const QString & mimetype, QVariant::Type type ) const

这意味着你拖到外面你相应地实现了这个功能

class DeferredMimeData : public QMimeData
{
DeferredMimeData(QString downloadFilename) : m_filename(downloadFilename)

virtual QVariant retrieveData (const QString & mimetype, QVariant::Type type) const
{
if (mimetype matches expected && type matches expected)
{
perform download with m_filename
}
}
}

delayed encoding例子说明了这个原则。

您可能还必须覆盖 hasFormatformats 以提供适当的类型,application/octet-stream 可能是可能会让您玩得最多,您可能需要阅读有关 windows 如何专门处理使用 mime 类型的拖放操作。

我不知道您将如何提供保存文件的文件名,但您可能不得不进入 Windows 方面。查看 QWindowsMime 的来源也可能有所帮助。可能有一个多步骤过程,您将获得对文件名的 text/uri-list 数据的请求,然后是对数据的 application/octet-stream 的请求。

希望对你有帮助

关于c++ - Qt 4.x : how to implement drag-and-drop onto the desktop or into a folder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2724252/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com