QMimeData 类

QMimeData 类提供了一个用于存储关于其 MIME 类型的信息的容器。 更多...

头文件 #include <QMimeData>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承自 QObject

公开函数

QMimeData()
虚拟~QMimeData()
voidclear()
QVariantcolorData() const
QByteArraydata(const QString &mimeType) const
virtual QStringListformats() const
boolhasColor() const
virtual boolhasFormat(const QString &mimeType) const
boolhasHtml() const
boolhasImage() const
boolhasText() const
boolhasUrls() const
QStringhtml() const
QVariantimageData() const
voidremoveFormat(const QString &mimeType)
voidsetColorData(const QVariant &color)
voidsetData(const QString &mimeType, const QByteArray &data)
voidsetHtml(const QString &html)
voidsetImageData(const QVariant &image)
voidsetText(const QString &text)
voidsetUrls(const QList<QUrl> &urls)
QStringtext() const
QList<QUrl>urls() const

受保护函数

virtual QVariantretrieveData(const QString &mimeType, QMetaType type) const

详细描述

QMimeData 用于描述可以存储在 剪贴板 中并通过 拖放 机制进行传输的信息。 QMimeData 对象将它们持有的数据与相应的 MIME 类型关联,以确保信息可以在应用程序之间安全地传输,并在同一应用程序内部进行复制。

QMimeData 对象通常使用 new 创建,并供给 QDragQClipboard 对象。这是为了使 Qt 能够管理它们使用的内存。

单个QMimeData对象可以同时使用几种不同的格式来存储相同的数据。函数formats()返回一个按优先顺序排列的可用的格式列表。函数data()返回与MIME类型关联的原始数据,而setData()允许您设置MIME类型的数据。

对于最常见的MIME类型,QMimeData提供了便捷的功能来访问数据

测试器获取器设置器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

例如,如果您编写了一个接受URL拖放的小部件,您将编写如下代码:

void MyWidget::dragEnterEvent(QDragEnterEvent *event)
{
    if (event->mimeData()->hasUrls())
        event->acceptProposedAction();
}

void MyWidget::dropEvent(QDropEvent *event)
{
    if (event->mimeData()->hasUrls()) {
        foreach (QUrl url, event->mimeData()->urls()) {
            ...
        }
    }
}

在QMimeData对象中存储自定义数据有三种方法:

  1. 可以使用QByteArray直接在QMimeData对象中存储自定义数据,并使用setData()。例如:
    QByteArray csvData = ...;
    
    QMimeData *mimeData = new QMimeData;
    mimeData->setData("text/csv", csvData);
  2. 我们可以子类化QMimeData并重新实现hasFormat(),formats()和retrieveData()。
  3. 如果在单个应用程序内部发生拖放操作,我们可以子类化QMimeData并在其中添加额外的数据,并在接收者的drop事件处理程序中使用qobject_cast()。例如:
    void MyWidget::dropEvent(QDropEvent *event)
    {
        const MyMimeData *myData =
                qobject_cast<const MyMimeData *>(event->mimeData());
        if (myData) {
            // access myData's data directly (not through QMimeData's API)
        }
    }

特定平台的MIME类型

在Windows上,formats()还将返回MIME数据中可用的自定义格式,使用x-qt-windows-mime子类型来指示它们代表非标准格式的数据。这些格式将采用以下形式:

application/x-qt-windows-mime;value="<custom type>"

以下是一些自定义MIME类型的示例:

application/x-qt-windows-mime;value="FileGroupDescriptor"
application/x-qt-windows-mime;value="FileContents"

每个格式的value声明描述了数据编码的方式。

在某些情况下(例如,放下多个电子邮件附件),可能存在多个数据值。可以通过添加一个index值来访问它们。

application/x-qt-windows-mime;value="FileContents";index=0
application/x-qt-windows-mime;value="FileContents";index=1

在Windows上,MIME格式并不总是直接映射到剪贴板格式。Qt提供了QWindowsMimeConverter将剪贴板格式映射到开放标准的MIME格式。同样,QUtiMimeConverter将MIME映射到macOS和iOS上的统一类型标识符。

另请参阅 QClipboardQDragEnterEventQDragMoveEventQDropEventQDrag拖放

成员函数文档

QMimeData::QMimeData()

构建一个没有数据的新的MIME数据对象。

[虚拟非抛出] QMimeData::~QMimeData()

销毁MIME数据对象。

void QMimeData::clear()

删除对象中的所有MIME类型和数据条目。

QVariant QMimeData::colorData() const

如果对象中存储的数据代表颜色(MIME类型为application/x-color),则返回颜色;否则返回null变体。

为什么使用了 QVariant,因为 QMimeData 属于 Qt 核心模块,而 QColor 属于 Qt GUI。要将 QVariant 转换为 QColor,只需使用 qvariant_cast()。例如

if (event->mimeData()->hasColor()) {
    QColor color = qvariant_cast<QColor>(event->mimeData()->colorData());
    ...
}

也请参阅 hasColor()、setColorData() 和 data()。

QByteArray QMimeData::data(const QString &mimeType) const

返回由指定 MIME 类型 mimeType 描述的对象中存储的数据格式。

也请参阅 setData()。

[虚函数] QStringList QMimeData::formats() const

返回对象支持的格式列表。这是对象可以返回合适数据的 MIME 类型列表。列表中的格式按优先级排序。

对于最常见的数据类型,您可以使用高级函数 hasText()、hasHtml()、hasUrls()、hasImage() 和 hasColor() 代替。

也请参阅 hasFormat()、setData() 和 data()。

bool QMimeData::hasColor() const

如果对象可以返回颜色(MIME 类型 application/x-color),则返回 true;否则返回 false

也请参阅 setColorData()、colorData() 和 hasFormat()。

[虚函数] bool QMimeData::hasFormat(const QString &mimeType) const

如果对象可以返回指定 MIME 类型 mimeType 的数据,则返回 true;否则返回 false

对于最常见的数据类型,您可以使用高级函数 hasText()、hasHtml()、hasUrls()、hasImage() 和 hasColor() 代替。

也请参阅 formats()、setData() 和 data()。

bool QMimeData::hasHtml() const

如果对象可以返回 HTML(MIME 类型 text/html),则返回 true;否则返回 false

也请参阅 setHtml()、html() 和 hasFormat()。

bool QMimeData::hasImage() const

如果对象可以返回图像,则返回 true;否则返回 false

也请参阅 setImageData()、imageData() 和 hasFormat()。

bool QMimeData::hasText() const

如果对象可以返回纯文本(MIME 类型 text/plain),则返回 true;否则返回 false

另请参阅 setText(),text(),hasHtml() 和 hasFormat()。

bool QMimeData::hasUrls() const

如果在对象可以返回 URL 列表的情况下返回 true,否则返回 false

URL 对应于 MIME 类型 text/uri-list

另请参阅 setUrls(),urls() 和 hasFormat()。

QString QMimeData::html() const

如果对象中存储的数据是 HTML(MIME 类型 text/html),则返回一个字符串;否则返回一个空字符串。

另请参阅 setHtml(),hasHtml() 和 setData()。

QVariant QMimeData::imageData() const

如果对象可以返回图像,则返回存储 QImageQVariant;否则返回一个 null 变体。

使用 QVariant,因为 QMimeData 属于 Qt 核心模块,而 QImage 属于 Qt GUI。要将 QVariant 转换为 QImage,请使用 qvariant_cast。例如

if (event->mimeData()->hasImage()) {
    QImage image = qvariant_cast<QImage>(event->mimeData()->imageData());
    ...
}

另请参阅 setImageData() 和 hasImage()。

void QMimeData::removeFormat(const QString &mimeType)

从对象中移除 mimeType 的数据条目。

[虚受保护] QVariant QMimeData::retrieveData(const QString &mimeType, QMetaType type) const

返回一个变体,该变体具有给定的 type,并包含由 mimeType 指定 MIME 类型的数据。如果对象不支持给定的 MIME 类型或变体系列,则返回 null 变体。

此函数由通用 data() 获取器以及便利获取器(text(),html(),urls(),imageData() 和 colorData())调用。如果要使用自定义数据结构(而不是 QByteArray,即 setData() 提供的内容)来存储数据,您可以将其实现。那么您还需要实现 hasFormat() 和 formats()。

另请参阅 data()。

void QMimeData::setColorData(const QVariant &color)

将对象中的颜色数据设置为给定的 color

颜色对应于 MIME 类型 application/x-color

另请参阅 colorData(),hasColor() 和setData()。

void QMimeData::setData(const QString &mimeType, const QByteArray &data)

将指定 MIME 类型mimeType关联的数据设置为data

对于最常见的几种数据类型,您可以直接调用高级函数setTextsetHtmlsetUrlssetImageDatasetColorData

注意,如果您想在列表视图的拖放操作中使用自定义数据类型,您必须使用Q_DECLARE_METATYPE 宏将其注册为 Qt meta type,并实现其流运算符。

另请参阅 datahasFormatQMetaTypeQ_DECLARE_METATYPE

void QMimeData::setHtml(const QString &html)

html 设置为表示数据的 HTML(MIME 类型 text/html)。

另请参阅 htmlhasHtmlsetTextsetData

void QMimeData::setImageData(const QVariant &image)

将对象中的数据设置为给定的 image

这里使用 QVariant 是因为 QMimeData 属于 Qt Core 模块,而 QImage 属于 Qt GUI。从 QImageQVariant 的转换是隐式的。例如

mimeData->setImageData(QImage("beautifulfjord.png"));

另请参阅 imageDatahasImagesetData

void QMimeData::setText(const QString &text)

text 设置为表示数据的纯文本(MIME 类型 text/plain)。

另请参阅 texthasTextsetHtmlsetData

void QMimeData::setUrls(const QList<QUrl> &urls)

将 MIME 数据对象中存储的 URL 设置为 urls 指定的 URL。

URL 对应于 MIME 类型 text/uri-list

自 Qt 5.0 起,setText 没有被调用之前,setUrls 也会以纯文本格式导出 urls,以便将其拖放到任何单行编辑器或文本编辑器中。

另请参阅 urlshasUrlssetData

QString QMimeData::text() const

返回数据的纯文本(MIME 类型 text/plain)表示形式。

另请参阅 setText(),hasText(),html() 和 data()。

QList<QUrl> QMimeData::urls() const

返回包含在 MIME 数据对象中的 URL 列表。

URL 对应于 MIME 类型 text/uri-list

另请参阅 setUrls(),hasUrls() 和 data()。

© 2024 The Qt Company Ltd. 本文档中包含的贡献的文档版权属于各自所有者。本提供的文档是根据由自由软件基金会发布的 GNU 自由文档许可证 1.3 版 的条款许可的。Qt 及相关标志是芬兰的 The Qt Company Ltd. 以及全球其他国家和地区的商标。所有其他商标均为各自所有者的财产。