本页内容

QWindowsMimeConverter Class

QWindowsMimeConverter 类将开放标准的 MIME 格式映射到 Windows 剪贴板格式。更多内容...

头文件: #include <QWindowsMimeConverter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

公共函数

QWindowsMimeConverter()
virtual ~QWindowsMimeConverter()
virtual bool canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const = 0
virtual bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const = 0
virtual bool convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM *pmedium) const = 0
virtual QVariant convertToMime(const QString &mimeType, IDataObject *pDataObj, QMetaType preferredType) const = 0
virtual QList<FORMATETC> formatsForMime(const QString &mimeType, const QMimeData *mimeData) const = 0
virtual QString mimeForFormat(const FORMATETC &formatetc) const = 0

静态公共成员

int registerMimeType(const QString &mimeType)

详细说明

Qt 的拖放和剪贴板功能采用 MIME 标准。在 X11 环境下,这与 Xdnd 协议直接对应;但在 Windows 系统中,虽然部分应用程序使用 MIME 类型来描述剪贴板格式,但其他应用程序则采用任意的非标准化命名约定,或是 Windows 系统中未命名的内置格式。

通过实例化 QWindowsMimeConverter 的子类(这些子类提供 Windows 剪贴板与 MIME 格式之间的转换),您可以将专有剪贴板格式转换为 MIME 格式。

在实例化QGuiApplication 后,创建转换器实现的实例:

int main(int argc, char **argv)
{
    QGuiApplication app(argc, argv);
    JsonMimeConverter jsonConverter;
}

销毁该实例将注销转换器并移除对该转换的支持。也可以通过堆分配来创建转换器实例;Qt 会接管所有权,并在QGuiApplication 关闭时删除该转换器对象。

Qt 预先定义了对以下 Windows 剪贴板格式的支持:

Windows 格式等效 MIME 类型
CF_UNICODETEXTtext/plain
CF_TEXTtext/plain
CF_DIBimage/xyz,其中xyz 是一个Qt image format
CF_HDROPtext/uri-list
CF_INETURLtext/uri-list
CF_HTMLtext/html

该类的用法示例是将 Windows 元文件剪贴板格式(CF_METAFILEPICT )与 MIME 类型image/x-wmf 进行双向映射。这种转换可能只是添加或移除一个头信息,甚至只是直接传递数据。有关选择和定义 MIME 类型的更多信息,请参阅“拖放”部分。

您可以使用canConvertFromMime() 检查 MIME 类型是否可转换,并使用convertToMime() 和convertFromMime() 进行转换。

成员函数文档

QWindowsMimeConverter::QWindowsMimeConverter()

创建一个 QWindowsMimeConverter 实例。

该实例会自动注册,并在剪贴板或拖放操作期间被调用以转换数据。

请在创建QGuiApplication 后调用此构造函数。

[virtual noexcept] QWindowsMimeConverter::~QWindowsMimeConverter()

创建一个QWindowsMimeConverter 实例。

该实例将自动注销。

[pure virtual] bool QWindowsMimeConverter::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const

如果转换器能够将mimeData 转换为formatetc 中指定的格式,则返回true 。

所有子类都必须重写此纯虚函数。

[pure virtual] bool QWindowsMimeConverter::canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const

如果转换器能够将pDataObj 中列出的可用格式转换为mimeType ,则返回true 。

所有子类都必须重写此纯虚函数。

[pure virtual] bool QWindowsMimeConverter::convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM *pmedium) const

将mimeData 转换为formatetc 中指定的格式。转换后的数据应存入pmedium 结构中。

如果转换成功,则返回 true。

所有子类都必须重写此纯虚函数。

[pure virtual] QVariant QWindowsMimeConverter::convertToMime(const QString &mimeType, IDataObject *pDataObj, QMetaType preferredType) const

返回一个QVariant ,其中包含从pDataObj 中mimeType 转换而来的数据。如果可能,QVariant 应为preferredType ,以避免不必要的转换。

所有子类都必须重写此纯虚函数。

[pure virtual] QList<FORMATETC> QWindowsMimeConverter::formatsForMime(const QString &mimeType, const QMimeData *mimeData) const

返回一个包含QList 的数组,其中各元素为FORMATETC结构,表示mimeData 中可为mimeType 提供的不同窗口剪贴板格式。

所有子类都必须重新实现此纯虚函数。

[pure virtual] QString QWindowsMimeConverter::mimeForFormat(const FORMATETC &formatetc) const

返回将根据formatetc 中指定的格式生成的MIME类型;如果该转换器不支持formatetc ,则返回空字符串。

所有子类都必须重写此纯虚函数。

[static] int QWindowsMimeConverter::registerMimeType(const QString &mimeType)

在 Windows 系统上注册 MIME 类型mimeType ,并返回一个用于标识该格式的 ID 号。

MIME 类型application/x-qt-windows-mime;value="WindowsType" 将被注册为WindowsType 的剪贴板格式。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.