後で復元できるように、クリップボードを通過するものをすべて保存する Qt アプリケーションを開発しています。私のアプローチは、からQMimeDataQApplication::clipboard()
を取得し、それを に格納することでしたQList<QMimeData *>
。クリップボードのデータは揮発性であるため、 によって返された QMimeData をコピーする必要がありQClipboard::mimeData()
ます。QMimeData のコピー コンストラクターがないため、次のようにコピーすると考えました。
const QMimeData * clipboardData = _clipboard->mimeData();
QMimeData * mimeCopy = new QMimeData();
foreach(const QString & format, clipboardData->formats())
mimeCopy->setData(format, clipboardData->data(format))
はどこ_clipboard
ですかQApplication::clipboard()
。
一部のアプリケーション固有の MIME タイプを除いて、これは比較的うまく機能します。たとえば、Skype メッセージをコピーして復元し、Skype の会話に貼り付けると、メッセージが「引用」されていないことに気付きました。これは私のコピーに欠陥があることを証明しますか? QMimeData をコピーするためのより良い、より正確な方法はありますか?
いくつかのデバッグの後、Skype メッセージの mimedata には 2 つの形式があることがわかりました。Text/Plain
メッセージ自体のテキストを含む型と、application/x-qt-windows-mime;value="SkypeMessageFragment"
いくつかの xml のようなデータを含む型。MIME タイプに関する Qt のドキュメントにvalue="..."
は、データのエンコード方法が記載されていることが示されています。QMimeData のコピーを有効にするために、ある時点で何かをエンコードまたはデコードする必要がありますか?