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

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.dtcms.com/a/162466.html

相关文章:

  • 临床试验概述:从定义到实践的关键要素
  • Docker的常用命令
  • 为什么MySQL推荐使用自增主键?
  • 密码杂凑算法HaoLooog512设计原理详解
  • TRex 控制台命令解析
  • C++:BST、AVL、红黑树
  • 【Android】SettingsPreferenceService
  • 网络协议之为什么要分层
  • Mamba2模型的实现
  • 《系统架构 - Java 企业应用架构中的完整层级划分》
  • 大学之大:韩国科学技术研究院2025.4.28
  • 聊一聊接口自动化测试的稳定性如何保障
  • 探秘Transformer系列之(31)--- Medusa
  • 嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码)
  • DAY9-USF4.0技术文档笔记
  • 学习笔记:Qlib 量化投资平台框架 — MAIN COMPONENTS (Part I)
  • PHP经验笔记
  • 【C++教程】三目运算符
  • Vue3中Hooks与普通函数的区别
  • 高效的CMS能帮助你快速建站。
  • 微机控制电液伺服钢轨滚动疲劳试验机
  • 喜马拉雅卖身腾讯音乐:在线音频独立时代的终结
  • shell(3)
  • 软件评测师考点重点知识
  • NdrpPointerUnmarshallInternal函数分析之pStubMsg--pAllocAllNodesContext的由来
  • vmare pro安装报错用户在命令行上发出了EULAS_AGREED=1,表示不接受许可协议的错误解决方法
  • MCP:如何通过模型控制推理助力AI模型实现“深度思考”?
  • timerfd定时器时间轮定时器
  • 机器学习:【抛掷硬币的贝叶斯后验概率】
  • 使用OpenAMP多核框架RPMsg实现高效控制和通信设计