C++ QDrag和Skype问题(仅限赢取)

C++ QDrag和Skype问题(仅限赢取),c++,windows,qt,drag-and-drop,skype,C++,Windows,Qt,Drag And Drop,Skype,我正在编写一个小的文件/档案资源管理器,在基于qt的应用程序和仅在Windows平台上的Skype聊天窗口之间的交互方面遇到了一个问题 当我尝试将文件(由QDrag提供,带有文件URL mime数据)从我的应用程序拖放到skype聊天窗口时,文件会被发送两次。当我尝试修改一个Qt拖放示例时,我得到了相同的结果 Skype版本是5.10.0.116。Qt版本4.7.3、4.8.1、4.8.3上的错误是可复制的 编辑: 已尝试在多个应用程序之间进行拖放交互 我的应用->浏览器=确定 我的应用->记

我正在编写一个小的文件/档案资源管理器,在基于qt的应用程序和仅在Windows平台上的Skype聊天窗口之间的交互方面遇到了一个问题

当我尝试将文件(由QDrag提供,带有文件URL mime数据)从我的应用程序拖放到skype聊天窗口时,文件会被发送两次。当我尝试修改一个Qt拖放示例时,我得到了相同的结果

Skype版本是5.10.0.116。Qt版本4.7.3、4.8.1、4.8.3上的错误是可复制的

编辑:

已尝试在多个应用程序之间进行拖放交互

  • 我的应用->浏览器=确定
  • 我的应用->记事本++=ok(仅在一个选项卡中显示文件内容)
  • 我的应用->WinRar=ok(使用 只有一个文件)
  • 我的应用->TotalCommander=ok
  • 我的应用->ICQ=ok(只发送一个文件)
  • 我的应用->克莱门汀(基于Qt的音乐播放器)=正常(只有一个文件 已添加到播放列表中)
  • 浏览器->Skype=ok
但是

  • 我的应用->Skype-文件发送两次
  • Clementine->Skype-文件发送两次
EDIT2:

此外,qt创建的mime数据与资源管理器创建的不同

Qt:

  • 0“文本/uri列表”file:///C:/Users/user/Pictures/myfile.ext"
  • 1“应用程序/x-qt-windows-mime;value=“UniformResourceLocatorW” “…”(我用省略号替换了QByteArray内容)
探索者:

  • 0“应用程序/x-qt-windows-mime;value=“Shell IDList数组”“。”
  • 1“应用程序/x-qt-windows-mime;value=“使用默认绘图” “…”
  • 2“application/x-qt-windows-mime;value=“DragImageBits”“。”
  • 3“应用程序/x-qt-windows-mime;value=“DragContext”“”…”
  • 4“应用程序/x-qt-windows-mime;value=“DragSourceHelperFlags” “…”
  • 5“应用程序/x-qt-windows-mime;value=“InShellDragLoop”“。”
  • 6“文本/uri列表”file:///C:/Users/user/Pictures/myfile.ext"

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

一个想法是:创建一个小助手应用程序,它可以查询drop元素中的可用数据。并查看从资源管理器拖动提供的数据,并检查应用程序提供的数据。我认为这是skype中的一个bug,无法正确处理给定的mime类型。