当前位置: 首页 > news >正文

QT6(拖放事件与拖放操作)

QT6


拖放事件拖放操作

处理drag,获取MIME数据

void dragEnterEvent(QDragEnterEvent* event) override;

处理drop,使用MIME数据

void dropEvent(QDropEvent* event) override;

什么是MIME?

多用途互联网邮件扩展(multipurpose internet mail extensions)设计之初是为了发送电子邮件时附加多媒体数据

  • QMimeData用于扫描存储在剪贴板中的信息,并支持通过拖放机制传输
  • QMimeData对象将它们所持有的数据与相应的MIME类型相关联,以确保信息可以在应用程序内,之间安全传输
  • “发送”和“接收“MIME类型数据时,必须类型匹配

📋 基本 MIME 类型

MIME 类型常量/标识描述常见用途
text/plainQMimeDatabase::PlainText纯文本数据文本复制粘贴、拖放操作
text/html-HTML 格式文本富文本内容传输
text/uri-list-文件路径列表文件拖放操作
application/x-color-颜色数据颜色选择器、颜色拖放
image/png-PNG 图像格式图像数据传输
image/jpeg-JPEG 图像格式图像数据传输
image/bmp-BMP 图像格式图像数据传输
application/x-qt-image-Qt 内部图像格式Qt 图像操作

🖱️ 拖放操作相关

MIME 类型描述使用场景
application/x-qabstractitemmodeldatalistQAbstractItemModel 数据模型视图拖放
application/x-qstandarditemmodeldatalistQStandardItemModel 数据标准项目模型拖放
application/x-qbytearray二进制数据自定义数据拖放

📋 剪贴板操作相关

MIME 类型描述示例代码
text/plain纯文本数据mimeData->setText("Hello")
text/htmlHTML 内容mimeData->setHtml("<b>Hello</b>")
image/png图像数据mimeData->setImageData(image)
application/x-color颜色数据mimeData->setColorData(color)

📁 文件操作相关

MIME 类型描述使用场景
text/uri-list文件/URL 列表文件拖放、URL 传输
application/x-qurlQt URL 格式URL 数据传输
inode/directory目录类型目录操作

🎨 自定义 MIME 类型

MIME 类型示例描述
application/x-custom-typeapplication/x-myapp-data应用程序特定数据
text/x-csvtext/x-csvCSV 数据格式
application/jsonapplication/jsonJSON 数据格式

代码测试

#include "widget.h"
#include "./ui_widget.h"
#include <QMimeData>
#include <QFileInfo>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 设置为接受托拽文件setAcceptDrops(true);ui->plainTextEdit->setAcceptDrops(false);ui->label->setAcceptDrops(false);
}Widget::~Widget()
{delete ui;
}// 使用事件进行布局
void Widget::resizeEvent(QResizeEvent *event)
{QSize size = ui->plainTextEdit->size();// 高度不变,使用widget的宽度ui->plainTextEdit->move(5,5);ui->label->move(5,size.height()+10);ui->plainTextEdit->resize(this->width()-10,size.height());ui->label->resize(this->width()-10,this->height()-size.height()-20);// 表示已经处理该事件event->accept();
}void Widget::dragEnterEvent(QDragEnterEvent *event)
{ui->plainTextEdit->clear();ui->plainTextEdit->appendPlainText("进入dragEnterEvent,MimeData的formate");for(auto &item:event->mimeData()->formats()){ui->plainTextEdit->appendPlainText(item);}ui->plainTextEdit->appendPlainText("进入dragEnterEvent,MimeData的urls");for(auto &item:event->mimeData()->urls()){ui->plainTextEdit->appendPlainText(item.toString());}// 当拖拽的是一张图片时if(event->mimeData()->hasUrls()){// 实际上获取到的是它的链接地址QString fileName = event->mimeData()->urls().at(0).fileName();QFileInfo fileInfo(fileName);QString ex =fileInfo.suffix().toUpper();if(ex == "JPG"){event->acceptProposedAction(); // 接受这个操作}else{event->ignore();}}else{event->ignore();}
}void Widget::dropEvent(QDropEvent *event)
{QString filePath = event->mimeData()->urls().at(0).path();filePath = filePath.right(filePath.length() - 1);QPixmap pixmap(filePath);ui->label->setPixmap(pixmap);ui->label->setScaledContents(true);event->accept();
}

效果展示

在这里插入图片描述


文章转载自:

http://TPogrTgR.tqqhm.cn
http://209ECVj1.tqqhm.cn
http://pvFCavUP.tqqhm.cn
http://kjp35s27.tqqhm.cn
http://tTKErkhG.tqqhm.cn
http://Xp9VJcJ7.tqqhm.cn
http://Crnz68CA.tqqhm.cn
http://G02P5AyQ.tqqhm.cn
http://Z3l8i1UZ.tqqhm.cn
http://03gxKEqC.tqqhm.cn
http://G5wSnS5O.tqqhm.cn
http://bgtUYoRU.tqqhm.cn
http://LMeJMcBh.tqqhm.cn
http://KdSQtdsb.tqqhm.cn
http://0cvdtCA9.tqqhm.cn
http://MZAtRWar.tqqhm.cn
http://PV19725I.tqqhm.cn
http://kn1xsTod.tqqhm.cn
http://1I1Br2eU.tqqhm.cn
http://7ZJsFgf6.tqqhm.cn
http://qPp8vDXr.tqqhm.cn
http://dHtIG3bV.tqqhm.cn
http://SDRVNlG4.tqqhm.cn
http://ezavfbGx.tqqhm.cn
http://GEh8Zi51.tqqhm.cn
http://BUzEKpt1.tqqhm.cn
http://oCcII4l5.tqqhm.cn
http://LZzYOsXa.tqqhm.cn
http://nJ9QaAyG.tqqhm.cn
http://Als0bxt5.tqqhm.cn
http://www.dtcms.com/a/367028.html

相关文章:

  • Java全栈工程师的实战面试:从Vue到Spring Boot的技术旅程
  • 3ds Max流体模拟终极指南:打造逼真液体效果,从瀑布到杯中溢出的饮料!
  • 处理PostgreSQL中的磁盘I/O瓶颈
  • Redission 对比isHeldByCurrentThread()和unlock()
  • 逻辑回归基础
  • 目标检测如何将同时有方形框和旋转框的json/xml标注转为txt格式
  • 拦截器和过滤器(理论+实操)
  • HTML 基本结构
  • 《Html泛型魔法学院:用霍格沃茨风格网页教授集合框架》
  • 【LVGL】从HTML到LVGL:嵌入式UI的设计迁移与落地实践
  • 白平衡分块统计数据为什么需要向下采样?
  • 基于单片机智能扫地机器人/智能小车设计
  • 2025 前端 3D 选型指南:Three.js、Babylon.js、WebGPU 深度对比
  • AI视频画质提升效果实用指南:提升清晰度的完整路径
  • Boost搜索引擎 数据清洗与去标签(1)
  • Deeplizard深度学习课程(七)—— 神经网络实验
  • 深度学习——数据增强
  • 在线测评系统---第n天
  • 【nuscenes数据集有关】
  • 你的图片又被别人“白嫖”了?用这篇Java防盗链攻略说再见!
  • python中的import和from两种导入方式有什么区别
  • MyBatis核心技术全解
  • 标注工具labelimg使用简介
  • 用 Rust + Actix-Web 打造“Hello, WebSocket!”——从握手到回声,只需 50 行代码
  • 【Java EE进阶 --- SpringBoot】Spring IoC
  • 机器学习基础-day03-机器学习中的线性回归
  • GPT-5冷酷操盘,游戏狼人杀一战封神!七大LLM狂飙演技,人类玩家看完沉默
  • FastGPT源码解析 Agent工作流编排后端详解
  • Python基础(①④内存管理机制)
  • 脑卒中目标检测含完整数据集