1 概述
QMimeData
类用于描述可以存储在剪贴板中并通过拖放机制传输的信息。
- QMimeData对象将它们所持有的数据与相应的MIME类型关联起来,以确保信息可以在应用程序之间安全地传输,并在同一应用程序内进行复制。
- QMimeData对象通常使用new创建,并提供给QDrag或QClipboard对象。这是为了使Qt能够管理它们使用的内存。
- 除了普通的文本、图像或二进制数据之外,QMimeData还能够识别和处理一些特定的MIME类型,如URLs、颜色值等等。对于不支持的MIME类型,QMimeData可以使用自定义的方式进行解析和传输。
2 基本规则
- QMimeData 类继承自 QObject,QMimeData 对象保存与 MIME 类型相关联的数据。
- QMimeData 类用于描述存储在剪贴板中,并能通过拖放机制进行传输的信息。
- 使用hasFormat()函数来检查对象中是否有特定格式的数据。
- 例:hasFormat(“text/plain”); 即可检查QMimeData对象中是否含有纯文本数据。
- 可以使用data()函数从QMimeData对象中提取数据。
- 该函数接受单一的形参,即所需的MIME类型,并返回与该类型相对应的数据内容。
- 可以通过重载formats()函数以自定义QMimeData对象能够支持和处理的数据格式列表。
- 自定义的 MIME 类型数据存储在 QMimeData 对象
- 使用 setData 函数把自定义类型以 QByteArray 的形式直接存储在 QMimeData 中,使
用此方法一次只能对一个 MIME 类型进行处理。 - 子类化 QMimeData
- 使用 setData 函数把自定义类型以 QByteArray 的形式直接存储在 QMimeData 中,使
3 常用函数
- 常见MIME类型相关函数
测试函数 | 读取函数 | 设置函数 | MIME类型 |
---|---|---|---|
hasText() | text() | setText() | text/plain |
hasHtml() | html() | setHtml() | text/html |
hasUrls() | urls() | setUrls() | text/uri-list |
hasImage() | imageData() | setImageData() | image/ * |
hasColor() | colorData() | setColorData() | application/x-color |
注意:颜色和图像使用 QVarant 进行存储,而不是 QColor 和 QImage。
- 因此在实际使用时需要在 QColor或 QImage 和 QVariant 之间进行转换,其中 QColor 或 QImage 到 QVariant 的转换是隐式的。
- 但从 QVariant 到 QColor 或 QImage 之间的转换需要使用 qvariant_cast()
- 比如 QColor c = qvariant_cast (mimeData ->colorData());
- setData()函数
// 将与MIME类型相关联的数据设置为指定的数据
void QMimeData::setData(const QString &mimeType, const QByteArray &data)
// 注意: 如果想在项目视图拖放操作中使用自定义数据类型,必须使用Q_DECLARE_METATYPE()宏将其注册为Qt元类型,并为其实现流操作符。
// 然后必须使用qRegisterMetaTypeStreamOperators()函数注册流操作符。
- Qt内置MIME类型
- 文本类型:“text/plain”
- HTML类型:“text/html”
- XML类型:“text/xml”, “application/xml”
- 图片类型:“image/png”, “image/jpeg”, “image/gif”
- 音频类型:“audio/mpeg”, “audio/wav”, “audio/ogg”
- 视频类型:“video/mp4”, “video/quicktime”
- PDF 格式:“application/pdf”
- 文档格式:
- application/vnd.oasis.opendocument.text
- application/msword
- application/vnd.openxmlformats-officedocument.wordprocessingml.document
- 分别对应 OpenDocument, Word 2003 和 Word 2007 及其以后版本的格式
- 等…