复制QMimeData对象的正确方式
Proper way to copy a QMimeData object
我正在开发一个Qt应用程序来存储剪贴板中的任何内容,以便稍后恢复。我的方法是从QApplication::clipboard()
中检索QMimeData,并将其存储在QList<QMimeData *>
中。由于剪贴板中的数据不稳定,我必须复制QClipboard::mimeData()
返回的QMimeData。QMimeData没有复制构造函数,所以我想我会这样复制它:
const QMimeData * clipboardData = _clipboard->mimeData();
QMimeData * mimeCopy = new QMimeData();
foreach(const QString & format, clipboardData->formats())
mimeCopy->setData(format, clipboardData->data(format))
其中CCD_ 4是CCD_。
除了一些特定于应用程序的MIME类型之外,这一操作相对较好。例如,我注意到,当我在Skype对话中复制、恢复并粘贴Skype消息时,该消息不再被"引用"。这是否证明我的复印件有缺陷?是否有更好、更准确的方法来复制QMimeData?
经过一些调试,我发现Skype消息mimedata中有两种格式。包含消息本身文本的Text/Plain
类型和包含一些类似xml的数据的application/x-qt-windows-mime;value="SkypeMessageFragment"
类型。Qt关于MIME类型的文档表明value="..."
描述了数据的编码方式。我是否必须在某个时刻对某些内容进行编码或解码才能使QMimeData的副本有效?
对于像application/x-qt-windows-mime;value="SomeValue"
这样的自定义MIME类型,实际的格式名称实际上是SomeValue
(在value=
之后,在两个引号之间)。
复制QMimeData对象的一种更准确的方法是这样的:
QMimeData * copyMimeData(const QMimeData * mimeReference)
{
QMimeData * mimeCopy = new QMimeData();
foreach(QString format, mimeReference->formats())
{
// Retrieving data
QByteArray data = mimeReference->data(format);
// Checking for custom MIME types
if(format.startsWith("application/x-qt"))
{
// Retrieving true format name
int indexBegin = format.indexOf('"') + 1;
int indexEnd = format.indexOf('"', indexBegin);
format = format.mid(indexBegin, indexEnd - indexBegin);
}
mimeCopy->setData(format, data);
}
return mimeCopy;
}
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 不同/较旧的处理器运行c++代码的方式是否不同
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 重载方法的方式会在使用临时调用时生成编译器错误
- 在reactor中存储eventHandlers的最佳方式是什么
- 如何以优化的方式同时迭代两个间距不相等的数组
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 为什么C++有不同的变量初始化方式?
- 在AVX通道中混洗的最佳方式
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- 如何以静态代码分析友好的方式使用 #define 防护?
- 复制QMimeData对象的正确方式