You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qt C++中获取剪贴板的MIME类型及存储数据

解决Qt获取剪贴板完整MIME类型并传输的问题

QMimeData类其实提供了直接获取所有MIME类型的方法——formats(),它会返回一个包含当前剪贴板所有可用MIME类型的QStringList,完全能满足你获取准确类型(包括图片的png/jpeg等细分类型)的需求。

具体实现步骤:

  • 调用mimeData->formats()拿到所有MIME类型列表
  • 遍历列表,根据需求筛选目标类型(比如筛选以image/开头的类型,就能得到图片的准确格式)
  • 对每个目标类型调用mimeData->data(mimetype)获取对应二进制数据,之后即可通过网络传输到其他设备

修改后的示例代码:

#include <QApplication>
#include <QClipboard>
#include <QMimeData>
#include <QDebug>

int main(int argc, char** argv) {
  auto application = QApplication(argc, argv);
  auto clip = QApplication::clipboard();

  const auto onChange = [&]() {
    const auto mimeData = clip->mimeData();
    if (!mimeData) return;

    // 获取所有可用的MIME类型
    const QStringList allFormats = mimeData->formats();
    qDebug() << "所有MIME类型:" << allFormats;

    // 遍历处理每个类型的数据
    for (const QString& mimetype : allFormats) {
      // 示例:优先处理图片类型
      if (mimetype.startsWith("image/")) {
        QByteArray imageData = mimeData->data(mimetype);
        qDebug() << "获取到图片数据,类型:" << mimetype << ",大小:" << imageData.size();
        // 这里可以添加网络传输逻辑,把mimetype和imageData发送出去
      }
      // 也可以处理文本、HTML等其他类型
      else if (mimetype == "text/plain") {
        QString text = mimeData->text();
        qDebug() << "纯文本内容:" << text;
      }
    }
  };

  QObject::connect(clip, &QClipboard::changed, onChange);
  application.exec();
}

额外提示:

  • 剪贴板内容可能同时包含多种MIME类型(比如一张图片可能同时提供image/png、text/uri-list(图片文件路径)等),你可以根据传输需求优先选择二进制数据类型(比如image/*),避免依赖本地路径
  • 跨平台场景下,Qt会统一不同系统剪贴板的MIME类型标识,不用额外处理系统差异
  • 传输时建议同时发送MIME类型和对应数据,接收端可以根据MIME类型正确解析内容(比如根据image/png来解码图片)

内容的提问来源于stack exchange,提问作者srilakshmikanthanp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:45:18