2

私は小さなファイル/アーカイブ エクスプローラーを作成していますが、qt ベースのアプリと Windows プラットフォームでの Skype チャット ウィンドウの間のやり取りで問題が発生しました。

アプリから Skype チャット ウィンドウにファイル (ファイル URL の MIME データを含む QDrag によって提供される) をドラッグ アンド ドロップしようとすると、ファイルが 2 回送信されます。Qtのドラッグアンドドロップの例の1つを変更しようとしたときに得たのと同じです。

Skype のバージョンは 5.10.0.116 です。バグは Qt バージョン 4.7.3、4.8.1、4.8.3 で再現可能です。

編集:

複数のアプリ間でドラッグ アンド ドロップ操作を試した

  • マイ アプリ -> エクスプローラー = OK
  • My app -> Notepad++ = ok (ファイルの内容を 1 つのタブにのみ表示)
  • My app -> WinRar = ok (1 つのファイルのみでアーカイブを作成)
  • 私のアプリ -> TotalCommander = OK
  • My app -> ICQ = ok (1 つのファイルのみが送信されます)
  • マイ アプリ -> Clementine (Qt ベースの音楽プレーヤー) = OK (プレイリストに 1 つのファイルのみが追加されます)
  • エクスプローラー -> スカイプ = OK

しかし

  • マイ アプリ -> Skype - ファイルが 2 回送信される
  • Clementine -> Skype - ファイルが 2 回送信される

EDIT2:

また、qt で作成された MIME データは、エクスプローラーで作成されたものとは異なります。

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="シェル IDList 配列"" "..."
  • 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"
4

1 に答える 1

0

なるほど、Qtなら問題ないのですが、Skype側のmimeデータ処理が間違っています。「text/uri-list」に加えて、Qt は「UniformResourceLocatorW」値に同じデータを提供します (否定できません。Qt ユーザーが取得できるよりもはるかに深く追加されています)。また、Skype は「text/uri-list」と「UniformResourceLocatorW」の両方の値を処理するため、同じファイルが 2 回送信されます。

于 2012-11-07T09:16:42.693 に答える