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

qt qtablewidget 行拖动(事件过滤器)

#include <QTableWidget>
class TablewidgetLineDropFilter : public QObject {Q_OBJECT
public:explicit TablewidgetLineDropFilter(QTableWidget* _box,QObject *parent = nullptr) : QObject(parent) {tablewidget=_box;}bool eventFilter(QObject *obj, QEvent *event) override {if(event->type() == QEvent::Drop){int row_src,row_dst;row_src = tablewidget->currentRow();                        // 原行号 可加ifQDropEvent *dropEvent = static_cast<QDropEvent*>(event);QTableWidgetItem *item = tablewidget->itemAt(dropEvent->pos()); // 获取落点的itemif(item !=nullptr){                                        // 判断是否为空row_dst = item->row();                                 // 不为空 获取其行号// 保证鼠标落下的位置 就是拖拽的一行最后所移动到的位置(考虑插入新行 移除原行的上下变化)row_src = (row_src > row_dst?    row_src + 1:row_src); // 如果src在dst的下方(行号大),后续插入dst会影响src的行号row_dst = (row_src < row_dst?    row_dst + 1:row_dst); // 如果src在dst的上方(行号小),后续移除src会影响dst的行号tablewidget->insertRow(row_dst);                              // 插入一行}else{                          // 落点没有item 说明拖动到了最下面row_dst = tablewidget->rowCount();// 获取行总数tablewidget->insertRow(row_dst);  // 在最后新增一行}// 执行移动 并移除原行for(int i = 0;i < tablewidget->columnCount();i++){            // 遍历列tablewidget->setItem(row_dst,i,tablewidget->takeItem(row_src,i));// 每一列item的移动}tablewidget->removeRow(row_src); // 删除原行//            for(int i = 0;i < tablewidget->columnCount();i++){
//                QTableWidgetItem* selectedItem = tablewidget->item(row_dst, i);
//                tablewidget->setCurrentItem(selectedItem);
//            }return true;}return QObject::eventFilter(obj, event);}
private:QTableWidget* tablewidget;
};

应用

table->setDragEnabled(true);  // 允许拖动table->setAcceptDrops(true);  // 接受放置table->setDragDropMode(QAbstractItemView::InternalMove);  // 内部移动模式table->setSelectionBehavior(QAbstractItemView::SelectRows);  // 整行选择table->setDropIndicatorShown(true);  // 显示放置位置指示table->viewport()->installEventFilter(new TablewidgetLineDropFilter(table));
http://www.rkmt.cn/news/15148.html

相关文章:

  • 深入解析:以CodeBuddy Code为砚,Prompt为丹青,勾勒编程星河
  • transformers音频实战01-音频概念 - 教程
  • 本地部署overleaf服务帮助latex论文编写 —— 操作笔记
  • 【Groovy】Array、List、Set、Map简介
  • 深入解析:【Python高级语法与正则表达式】
  • 做题记录4
  • lucene 8.7.0 版本中的倒排索引、数字、DocValues三种类型的查询性能对比 - 教程
  • display ip routing-table故障判断及题目 - 详解
  • 解题报告-小 A 的树
  • 【React 状态管理深度解析:Object.is()、Hook 机制与 Vue 对比实践指南】 - 教程
  • 页面置换算法
  • 2025盐酸优质厂家权威推荐榜:高纯度盐酸的品质之选
  • 2025片碱厂家权威推荐榜:优质供应与实力生产口碑之选
  • 2025阳离子聚丙烯酰胺厂家推荐榜:高效絮凝与定制解决方案
  • AI与敏捷开发管理系列3:敏捷方法在AI计划中的应用案例
  • 2025 年转基因小鼠公司 TOP 企业品牌推荐排行榜,传统 KO 转基因小鼠,条件性 cKO 转基因小鼠,ROSA26 位点基因 KI 小鼠,Tol2 转基因小鼠模型,点突变敲入转基因小鼠公司推荐!
  • 读人形机器人29未来10年
  • 深入解析:C#/.NET/.NET Core优秀项目和框架2025年9月简报
  • java-mc-sever
  • 华为荣耀手机密码忘记怎么解锁wenwenhu专用解锁平台”在哪下载?用它成功弄好锁定方式
  • 黑科技还是真噱头?详解当下的cloak斗篷技术。
  • 完整教程:【论文笔记】基于深度学习的图像分割研究综述 和 基于深度学习的二分图像分割综述
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十四) -> 配置构建(一) - 指南
  • 2025 年离心机厂家 TOP 企业品牌推荐排行榜,平板,吊袋,刮刀,拉袋,全自动,平板吊袋,平板刮刀,下卸料,卧式过滤,实验室,浓缩过滤离心机公司推荐!
  • orbital 转换scikitlearn pipeline 为sql的框架
  • 2025 办公家具厂家 TOP 企业品牌推荐排行榜,实木办公家具,现代办公家具,环保办公家具,智能办公家具,定制办公家具,老板办公家具,总裁办公家具公司推荐!
  • 2025pc穿线管源头厂家 TOP 企业品牌推荐排行榜,PC 建筑工程电工套管,PC 刚性阻燃电线管,PC 硬质刚性塑料管,PC 刚性阻燃低烟无卤绝缘,PC 地铁工程预埋公司推荐!
  • 2025 年溴化锂回收公司 TOP 回收服务商推荐排行榜,溴化锂,溴化锂制冷机,溴化锂水溶液,溴化锂设备,溴化锂机组,旧溴化锂机组回收公司推荐!
  • 2025 年河北光伏支架设备厂家 TOP 企业品牌推荐排行榜,廊坊,霸州,北方光伏支架设备,光伏支架冲孔机,光伏支架角钢成型机,光伏支架 C 型钢成型机推荐这十家公司!
  • 2025冷库板厂家TOP企业品牌推荐排行榜,聚氨酯冷库板,冷库保温板,冷库用 B1 级阻燃板,聚氨酯冷库板,冷库保温板工程,聚氨酯夹心板,聚氨酯保温板,聚氨酯板,聚氨酯防火板公司推荐!