QMimeData 类
QMimeData 类提供了一个用于存储关于其 MIME 类型的信息的容器。 更多...
头文件 | #include <QMimeData> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
继承自 | QObject |
公开函数
QMimeData() | |
虚拟 | ~QMimeData() |
void | clear() |
QVariant | colorData() const |
QByteArray | data(const QString &mimeType) const |
virtual QStringList | formats() const |
bool | hasColor() const |
virtual bool | hasFormat(const QString &mimeType) const |
bool | hasHtml() const |
bool | hasImage() const |
bool | hasText() const |
bool | hasUrls() const |
QString | html() const |
QVariant | imageData() const |
void | removeFormat(const QString &mimeType) |
void | setColorData(const QVariant &color) |
void | setData(const QString &mimeType, const QByteArray &data) |
void | setHtml(const QString &html) |
void | setImageData(const QVariant &image) |
void | setText(const QString &text) |
void | setUrls(const QList<QUrl> &urls) |
QString | text() const |
QList<QUrl> | urls() const |
受保护函数
virtual QVariant | retrieveData(const QString &mimeType, QMetaType type) const |
详细描述
QMimeData 用于描述可以存储在 剪贴板 中并通过 拖放 机制进行传输的信息。 QMimeData 对象将它们持有的数据与相应的 MIME 类型关联,以确保信息可以在应用程序之间安全地传输,并在同一应用程序内部进行复制。
QMimeData 对象通常使用 new
创建,并供给 QDrag 或 QClipboard 对象。这是为了使 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对象中存储自定义数据有三种方法:
- 可以使用QByteArray直接在QMimeData对象中存储自定义数据,并使用setData()。例如:
QByteArray csvData = ...; QMimeData *mimeData = new QMimeData; mimeData->setData("text/csv", csvData);
- 我们可以子类化QMimeData并重新实现hasFormat(),formats()和retrieveData()。
- 如果在单个应用程序内部发生拖放操作,我们可以子类化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上的统一类型标识符。
另请参阅 QClipboard,QDragEnterEvent,QDragMoveEvent,QDropEvent,QDrag和拖放。
成员函数文档
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
如果对象可以返回图像,则返回存储 QImage 的 QVariant;否则返回一个 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。
对于最常见的几种数据类型,您可以直接调用高级函数setText,setHtml,setUrls,setImageData 和 setColorData。
注意,如果您想在列表视图的拖放操作中使用自定义数据类型,您必须使用Q_DECLARE_METATYPE 宏将其注册为 Qt meta type,并实现其流运算符。
另请参阅 data,hasFormat,QMetaType 和 Q_DECLARE_METATYPE。
void QMimeData::setHtml(const QString &html)
将 html 设置为表示数据的 HTML(MIME 类型 text/html
)。
另请参阅 html,hasHtml,setText 和 setData。
void QMimeData::setImageData(const QVariant &image)
将对象中的数据设置为给定的 image。
这里使用 QVariant 是因为 QMimeData 属于 Qt Core 模块,而 QImage 属于 Qt GUI。从 QImage 到 QVariant 的转换是隐式的。例如
mimeData->setImageData(QImage("beautifulfjord.png"));
另请参阅 imageData,hasImage 和 setData。
void QMimeData::setText(const QString &text)
将 text 设置为表示数据的纯文本(MIME 类型 text/plain
)。
另请参阅 text,hasText,setHtml 和 setData。
void QMimeData::setUrls(const QList<QUrl> &urls)
将 MIME 数据对象中存储的 URL 设置为 urls 指定的 URL。
URL 对应于 MIME 类型 text/uri-list
。
自 Qt 5.0 起,setText 没有被调用之前,setUrls 也会以纯文本格式导出 urls,以便将其拖放到任何单行编辑器或文本编辑器中。
QString QMimeData::text() const
返回数据的纯文本(MIME 类型 text/plain
)表示形式。
另请参阅 setText(),hasText(),html() 和 data()。
QList<QUrl> QMimeData::urls() const
返回包含在 MIME 数据对象中的 URL 列表。
URL 对应于 MIME 类型 text/uri-list
。
© 2024 The Qt Company Ltd. 本文档中包含的贡献的文档版权属于各自所有者。本提供的文档是根据由自由软件基金会发布的 GNU 自由文档许可证 1.3 版 的条款许可的。Qt 及相关标志是芬兰的 The Qt Company Ltd. 以及全球其他国家和地区的商标。所有其他商标均为各自所有者的财产。