c++ - QDrag 和 Skype 问题(仅限 win)

标签 c++ windows qt drag-and-drop skype

我正在编写一个小文件/文件资源管理器,但在基于 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/

相关文章:

c++ - QT容器类问题

c++ - void 和非 void 返回函数的完美转发

c - SSE 内部函数 : Fastest way to test for all 0s or 1s?

qt - 如何将 QML 对象引用传递给 Qt C++?

qt - QGraphicsScene 中 QWidget 的图形错误

C++字节流

c++ - 寻找二维贝塞尔曲线的拐点

windows - Tomcat 多个实例同时

c++ - 将 MFC 对话框从 STA 更改为 MTA?

c++ - 评论中的字符是什么意思?