Jer*_*ner 18 c++ directory desktop qt drag-and-drop
我用Qt 4.x编写了一个用C++编写的小文件传输应用程序...它登录到服务器,向用户显示服务器上可用的文件列表,并允许用户上传或下载文件.
这一切都很好; 您甚至可以从桌面(或从打开的文件夹)拖入文件,当您将文件图标放入server-files-list-view时,删除的文件将上传到服务器.
现在我也请求相反的操作...我的用户希望能够将文件从server-files-list-view拖到桌面上,或者拖到打开的文件夹窗口中,然后让它文件下载到该位置.
这似乎是一个合理的要求,但我不知道如何实现它.有没有办法让Qt应用程序找到与"drop event"发生位置相对应的目录,当图标被放到桌面上或打开文件夹窗口时?理想情况下,这将是一个基于Qt的平台中立机制,但如果不存在,那么MacOS/X和Windows(XP或更高版本)的平台特定机制就足够了.
有任何想法吗?
看看QMimeData它的文档,它有一个虚函数
virtual QVariant retrieveData ( const QString & mimetype, QVariant::Type type ) const
Run Code Online (Sandbox Code Playgroud)
这意味着你拖到外面就可以相应地实现这个功能
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
的延迟编码的例子示出了该原理.
您可能还必须覆盖hasFormat并formats提供适当的类型,application/octet-stream可能是可能让您玩得最多的类型,您可能必须阅读Windows如何使用mime类型专门处理拖放.
我不知道你将如何提供保存文件的文件名,但你可能不得不进入windows方面.看看QWindowsMime可能的来源也有帮助.可能有一个多步骤过程,您将获得text/uri-list文件名数据的请求,然后application/octet-stream是数据请求.
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
6516 次 |
| 最近记录: |