我正在编写一个小文件/文件资源管理器,但在基于 qt 的应用程序与仅 Windows 平台上的 Skype 聊天窗口之间的交互方面遇到了问题。
当我尝试将文件(由 QDrag 提供的带有 file-urls mime 数据的文件)从我的应用程序拖放到 Skype 聊天窗口时,文件被发送了两次。我在尝试修改其中一个 Qt 拖放示例时遇到了同样的情况。
Skype 版本为 5.10.0.116。该错误可在 Qt 版本 4.7.3、4.8.1、4.8.3 上重现。
编辑:
尝试过多个应用之间的拖放交互
- 我的应用 -> Explorer = ok
- 我的应用程序 -> Notepad++ = ok(仅在一个选项卡中显示文件内容)
- 我的应用程序 -> WinRar = ok(创建存档 只有一个文件)
- 我的应用程序 -> TotalCommander = ok
- 我的应用程序 -> ICQ = ok(只发送了一个文件)
- 我的应用程序 -> Clementine(基于 Qt 的音乐播放器)= ok(只有一个文件 已添加到播放列表)
- Explorer -> Skype = ok
但是
- 我的应用 -> Skype - 文件发送了两次
- Clementine -> Skype - 文件发送了两次
编辑 2:
此外,qt 创建的 mime 数据与 explorer 创建的不同。
Qt:
- 0 "text/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 Array"""..."
- 1 "application/x-qt-windows-mime;value="UsingDefaultDragImage"" “……”
- 2 "application/x-qt-windows-mime;value="DragImageBits"""..."
- 3 "application/x-qt-windows-mime;value="DragContext"""..."
- 4 "application/x-qt-windows-mime;value="DragSourceHelperFlags"" “……”
- 5 "application/x-qt-windows-mime;value="InShellDragLoop"""..."
- 6 "text/uri-list""file:///C:/Users/user/Pictures/myfile.ext"
最佳答案
我明白了,如果是Qt就没有问题,就是Skype端的mime数据处理不对。除了“text/uri-list”,Qt 还提供了具有相同数据的“UniformResourceLocatorW”值(我不能否认,它添加的比 Qt 用户所能获得的要深得多)。 Skype 处理这两个值——“text/uri-list”和“UniformResourceLocatorW”,导致发送同一个文件两次。
关于c++ - QDrag 和 Skype 问题(仅限 win),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120627/