小编Gui*_*don的帖子

复制 QMimeData 对象的正确方法

我正在开发一个 Qt 应用程序来存储通过剪贴板的任何内容,以便我以后可以恢复它。我的方法是检索QMimeDataQApplication::clipboard()并将其存储在一个QList<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))
Run Code Online (Sandbox Code Playgroud)

这里_clipboardQApplication::clipboard()

除了某些特定于应用程序的 MIME 类型外,这相对较好。例如,我注意到当我在 Skype 对话中复制、恢复然后粘贴 Skype 消息时,该消息不再“引用”。这是否证明我的副本有缺陷?有没有更好、更准确的方法来复制 QMimeData ?

经过一番调试,我发现Skype消息的mimedata有两种格式。甲Text/Plain包含消息本身的文本和类型application/x-qt-windows-mime;value="SkypeMessageFragment",其包含一些XML样的数据类型。Qt 关于 MIME 类型的文档表明value="..."描述了数据的编码方式。我是否必须在某个时候编码或解码某些东西才能使我的 QMimeData 副本有效?

c++ clipboard qt

5
推荐指数
1
解决办法
3134
查看次数

标签 统计

c++ ×1

clipboard ×1

qt ×1