我正在编写一个小文件/档案资源管理器,并且仅在 Windows 平台上遇到了基于 qt 的应用程序和 Skype 聊天窗口之间的交互问题。
当我尝试从我的应用程序拖放文件(由 QDrag 提供的文件-urls mime 数据)到 Skype 聊天窗口时,文件被发送两次。尝试修改 Qt 拖放示例之一时,我遇到了同样的情况。
Skype 版本是 5.10.0.116。错误可在 Qt 版本 4.7.3、4.8.1、4.8.3 上重现。
编辑:
尝试过多个应用程序之间的拖放交互
- 我的应用程序 -> 资源管理器 = 好的
- 我的应用程序 -> Notepad++ = ok(仅在一个选项卡中显示文件内容)
- 我的应用程序 -> WinRar = ok(创建只有一个文件的存档)
- 我的应用程序-> TotalCommander = 好的
- 我的应用程序 -> ICQ = ok(只发送一个文件)
- 我的应用程序 -> Clementine(基于 Qt 的音乐播放器)= ok(只有一个文件添加到播放列表)
- 资源管理器 -> Skype = 好的
但
- 我的应用程序 -> Skype - 文件发送两次
- Clementine -> Skype - 文件发送两次
编辑2:
此外,qt 创建的 mime 数据与 explorer 创建的数据不同。
数量:
- 0 "文本/uri-list" "file:///C:/Users/user/Pictures/myfile.ext"
- 1 "application/x-qt-windows-mime;value="UniformResourceLocatorW"" "..." (我已将 QByteArray 内容替换为省略号)
探险家:
- 0 "application/x-qt-windows-mime;value="Shell IDList 数组"" "..."
- 1 "应用程序/x-qt-windows-mime;value="UsingDefaultDragImage"" "..."
- 2 "应用程序/x-qt-windows-mime;value="DragImageBits"" "..."
- 3 "应用程序/x-qt-windows-mime;value="DragContext"" "..."
- 4 "application/x-qt-windows-mime;value="DragSourceHelperFlags"" "..."
- 5 "应用程序/x-qt-windows-mime;value="InShellDragLoop"" "..."
- 6 "text/uri-list" "file:///C:/Users/user/Pictures/myfile.ext"