Qt 拖放 - QMimeData类(2)

1 概述

QMimeData类用于描述可以存储在剪贴板中并通过拖放机制传输的信息。

  • QMimeData对象将它们所持有的数据与相应的MIME类型关联起来,以确保信息可以在应用程序之间安全地传输,并在同一应用程序内进行复制。
  • QMimeData对象通常使用new创建,并提供给QDrag或QClipboard对象。这是为了使Qt能够管理它们使用的内存。
  • 除了普通的文本、图像或二进制数据之外,QMimeData还能够识别和处理一些特定的MIME类型,如URLs、颜色值等等。对于不支持的MIME类型,QMimeData可以使用自定义的方式进行解析和传输。

2 基本规则

  1. QMimeData 类继承自 QObject,QMimeData 对象保存与 MIME 类型相关联的数据。
  2. QMimeData 类用于描述存储在剪贴板中,并能通过拖放机制进行传输的信息。
  3. 使用hasFormat()函数来检查对象中是否有特定格式的数据。
    • 例:hasFormat(“text/plain”); 即可检查QMimeData对象中是否含有纯文本数据。
  4. 可以使用data()函数从QMimeData对象中提取数据。
    • 该函数接受单一的形参,即所需的MIME类型,并返回与该类型相对应的数据内容。
  5. 可以通过重载formats()函数以自定义QMimeData对象能够支持和处理的数据格式列表。
  6. 自定义的 MIME 类型数据存储在 QMimeData 对象
    • 使用 setData 函数把自定义类型以 QByteArray 的形式直接存储在 QMimeData 中,使
      用此方法一次只能对一个 MIME 类型进行处理。
    • 子类化 QMimeData

3 常用函数

  1. 常见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());
  1. setData()函数
// 将与MIME类型相关联的数据设置为指定的数据
void QMimeData::setData(const QString &mimeType, const QByteArray &data)
// 注意: 如果想在项目视图拖放操作中使用自定义数据类型,必须使用Q_DECLARE_METATYPE()宏将其注册为Qt元类型,并为其实现流操作符。
// 然后必须使用qRegisterMetaTypeStreamOperators()函数注册流操作符。
  1. 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 及其以后版本的格式
  • 等…
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值