2

我正在编写一个小文件/档案资源管理器,并且仅在 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"
4

1 回答 1

0

我明白了,如果 Qt 没问题,这是 Skype 端的错误 mime 数据处理。除了“text/uri-list”,Qt 还提供了具有相同数据的“UniformResourceLocatorW”值(我不能否认,它添加的深度比 Qt 用户所能得到的要深得多)。Skype 处理两个值——“text/uri-list”和“UniformResourceLocatorW”,导致发送相同的文件两次。

于 2012-11-07T09:16:42.693 回答