QMimeData 是 Qt 中数据交换的标准化载体。粘贴复制,跨应用的标准格式。也能自定义数据类型

📅 发布时间:2026/7/10 15:03:20 👁️ 浏览次数:
QMimeData 是 Qt 中数据交换的标准化载体。粘贴复制,跨应用的标准格式。也能自定义数据类型
// 示例自定义 MIME 数据类对应你代码中的 ShapeMimeDataclassShapeMimeData:publicQMimeData{Q_OBJECTpublic:// 构造函数传入要传递的图形项列表ShapeMimeData(constQListQGraphicsItem*items):m_items(items){// 关键设置自定义 MIME 类型标识这是「图形项数据」setData(application/x-draw-shape,QByteArray());}// 获取自定义数据图形项列表QListQGraphicsItem*items()const{returnm_items;}// 重写 hasFormat告诉外部「我支持这个自定义类型」boolhasFormat(constQStringmimeType)constoverride{returnmimeTypeapplication/x-draw-shape||QMimeData::hasFormat(mimeType);}private:QListQGraphicsItem*m_items;// 存储自定义的图形项数据};典型使用流程对应你代码中的复制 / 粘贴1复制封装数据voidMainWindow::on_copy(){QGraphicsScene*sceneactiveMdiChild()-scene();// 1. 创建自定义 MIME 数据封装选中的图形项ShapeMimeData*datanewShapeMimeData(scene-selectedItems());// 2. 把 MIME 数据设置到剪贴板QApplication::clipboard()-setMimeData(data);}2粘贴解析数据voidMainWindow::on_paste(){QGraphicsScene*sceneactiveMdiChild()-scene();// 1. 从剪贴板获取 MIME 数据constQMimeData*mimeDataQApplication::clipboard()-mimeData();// 2. 转换为自定义的 ShapeMimeData判断类型constShapeMimeData*shapeDatadynamic_castconstShapeMimeData*(mimeData);if(shapeData){// 3. 获取封装的图形项数据执行粘贴逻辑foreach(QGraphicsItem*item,shapeData-items()){// 复制图形项、添加到场景...}}}