我正在開發一個Qt應用程序來存儲任何通過剪貼板,以便我可以稍後恢復。我的方法是從QApplication::clipboard()
中檢索QMimeData,並將其存儲在QList<QMimeData *>
中。由於剪貼板中的數據是不穩定的,我必須複製QClipboard::mimeData()
返回的QMimeData。 沒有複製構造QMimeData所以我想,我會複製這樣的:正確的方法來複制一個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中有兩種格式。 A Text/Plain
類型包含消息本身的文本和application/x-qt-windows-mime;value="SkypeMessageFragment"
類型,其中包含一些類似XML的數據。 Qt's documentation on MIME types指示value="..."
描述數據如何被編碼。我需要在某些時候編碼或解碼某些內容以使我的QMimeData的副本有效嗎?