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

QT事件Trick

拖动

void DWidget::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){QListWidgetItem *selItem = currentItem();if(selItem!= nullptr){m_startPos=event->pos();  //记录鼠标按下时的起始位置}}QListWidget::mousePressEvent(event);
}void DWidget::mouseMoveEvent(QMouseEvent *event)
{if(event->buttons()&Qt::LeftButton){int instance=(event->pos()-m_startPos).manhattanLength();  //计算拖动位置与起始位置的距离if(instance>=QApplication::startDragDistance())  //防止手抖,必须超过一定距离。QApplication::startDragDistance()默认为4。{perfomDrag();}}
}
void DWidget::perfomDrag()
{QListWidgetItem *pItem = currentItem();  //当前拖动项if(pItem!= nullptr&&!pItem->text().contains(tr("参数"))){QDrag *drag = new QDrag(this);  //拖动类QMimeData *pMimedata = new QMimeData;DragParameters param=pItem->data(Qt::UserRole).value<DragParameters>();//传递数据QByteArray outBa;outBa.resize(sizeof(param));QBuffer buffer(&outBa);buffer.open(QIODevice::WriteOnly);QDataStream out(&buffer);out << param;buffer.close();pMimedata->setData("application/DragParameters",outBa);//拖动图片显示,显示参数名QString text=pItem->text();QPainter painter(&pix);painter.drawText(rect, text);drag->setPixmap(pix);drag->setMimeData(pMimedata);Qt::DropAction action = drag->exec(Qt::MoveAction);if(action==Qt::MoveAction)  //移动{}else if(action==Qt::IgnoreAction)  //拖动被拒、无接收{}}
}

QMimeData

Qt中封装MIME类型数据的容器,允许应用程序传输文本、图像、颜色、自定义二进制数据等。

application/DragParameters​:自定义MIME类型,明确标识拖拽操作中传递的数据类型,确保发送方和接收方使用同一标识解析数据

数据内容 (outBa)​​:类型为 QByteArray 的字节数组,包含实际传输的二进制数据。

http://www.xdnf.cn/news/2814.html

相关文章:

  • 网络》》ARP、NAT
  • 【题解】CF2096F
  • JAVA中Spring全局异常处理@ControllerAdvice解析
  • 【前端】跟进新趋势- PWA WebAssembly
  • 医院信息管理系统全解析
  • 第六章:Tool and LLM Integration
  • DDS(数据分发服务)原理详解
  • 第三章:Configuration Management
  • 测试用例设计的完整过程详解:从需求到覆盖的实战指南
  • Python 中调用方法内部定义的类详解(类在方法中的各种操作)
  • 3、CMake语法:制作和使用动态库和静态库
  • 现代c++获取linux所有的网络接口名称
  • Java大师成长计划之第6天:Java流式API(Stream API)
  • Kubernetes基础与部署实战
  • shell(3)
  • windows中无法关闭mysql57服务
  • 深度学习近十年的汇总
  • 复习Vue136~180
  • HarmonyOS SDK助力鸿蒙版今日水印相机,真实地址防护再升级
  • n 卡编码
  • 高级java每日一道面试题-2025年4月28日-基础篇[反射篇]-反射操作中,`invoke()`方法的作用是什么?
  • 基于【低代码+AI智能体】开发智能考试系统
  • Python-Part2-集合、字典与推导式
  • 基于docker部署mssqlserver : mcr.microsoft.com/mssqlserver:2022-latest
  • 第十八节:开放性问题-Vue生态未来趋势
  • kubernetes常用命令 k8s指令大全
  • 【205】Python3 实现整数和IP地址字符串互相转换
  • 【读书笔记】机器行为与具身智能
  • pywinauto操作Windows应用
  • VUE3:封装一个评论回复组件