【Qt】QTableWidget设置可以选择多行多列,并能复制选择的内容到剪贴板

devtools/2024/9/24 11:53:57/

比如有一个 QTableWidget*m_tbwQuery

m_tbwQuery->installEventFilter(this); //进行事件过滤处理//设置可以选择多行多列
m_tbwQuery->setSelectionMode(QAbstractItemView::MultiSelection); 
m_tbwQuery->setSelectionBehavior(QAbstractItemView::SelectItems); 
m_tbwQuery->setFocusPolicy(Qt::StrongFocus);  // 或者 Qt::ClickFocus 或 Qt::TabFocus//点击后,取消原来选择的
connect(m_tbwQuery, &QTableWidget::itemPressed, [=](QTableWidgetItem* item){if (item) {m_tbwQuery->clearSelection();m_tbwQuery->setSelectionMode(QAbstractItemView::MultiSelection);m_tbwQuery->setCurrentItem(item);item->setSelected(true);}});// 双击选择一行
connect(m_tbwQuery, &QTableWidget::itemDoubleClicked, [=](QTableWidgetItem* item) {if (item) {m_tbwQuery->clearSelection();m_tbwQuery->setSelectionMode(QAbstractItemView::MultiSelection);m_tbwQuery->selectRow(item->row());}});

在事件过滤中处理键盘事件,快捷键是Ctrl+C

/// 事件过滤
bool QueryDataTable::eventFilter(QObject* obj, QEvent* event) 
{if (obj == m_tbwQuery){if (event->type() == QEvent::KeyPress) {QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);if (keyEvent->matches(QKeySequence::Copy)) {copySelectedCellsToClipboard();return true;  // Event handled}}}return QObject::eventFilter(obj, event);
}

最后是实现复制到剪贴板的函数

// 复制选定单元格内容到剪贴板的函数
void QueryDataTable::copySelectedCellsToClipboard() 
{QItemSelectionModel* selectionModel = m_tbwQuery->selectionModel();QModelIndexList indexes = selectionModel->selectedIndexes();if (!indexes.isEmpty()) {qSort(indexes); // 为了确保数据按照视觉顺序排序QString text;QModelIndex previous = indexes.first();QModelIndex current;foreach(const QModelIndex & index, indexes) {if (index != previous) {if (index.row() != previous.row()) {text += '\n';}else {text += '\t';}}text += index.data(Qt::DisplayRole).toString();previous = index;}QApplication::clipboard()->setText(text);}
}

http://www.ppmy.cn/devtools/58109.html

相关文章

C++ Lambda表达式第二篇, Lambda表达式

C Lambda表达式 Lambda 捕获含有模板参数的Lambda表达式无模板参数的Lambda表达式 Lambda 捕获 captures是零个或多个捕获的逗号分隔列表&#xff0c;可以选择以capture-default开头。捕获列表定义可从 lambda 函数体内访问的外部变量。唯一的捕获默认值是 &&#xff0c;…

MySQL 进阶(一)【存储引擎】

1、存储引擎 1.1、MySQL 体系结构 自上而下可以分为 连接层 接受客户端的连接&#xff0c;完成连接的处理、认证授权、安全方案和最大连接数等服务层 绝大部分的核心功能都是在服务层完成的&#xff0c;比如SQL 接口&#xff08;DDL、DML、视图、触发器、存储过程&#xff09…

用R在地图上绘制网络图的三种方法

地理网络图与传统的网络图不同&#xff0c;当引用地理位置进行节点网络可视化时&#xff0c;需要将这些节点放置在地图上&#xff0c;然后绘制他们之间的连结。Markus konrad的帖子(https://datascience.blog.wzb.eu/2018/05/31/three-ways-of-visualizing-a-graph-on-a-map/)&…

ERP、CRM、MRP、PLM、APS、MES、WMS、SRM系统之间的关系

ERP系统是企业运营的神经中枢&#xff0c;整合了财务、人力资源、供应链等关键业务流程。CRM系统作为客户关系管理的专家&#xff0c;帮助企业深入了解客户需求&#xff0c;提升服务质量。MRP是物料需求的规划师&#xff0c;确保生产所需材料及时供应。PLM系统守护着产品从设计…

【CT】LeetCode手撕—31. 下一个排列

目录 题目1- 思路2- 实现⭐31. 下一个排列——题解思路 3- ACM 实现 题目 原题连接&#xff1a;31. 下一个排列 1- 思路 思路 ① 从右边找出一个尽可能大的数&#xff0c;和左边的数进行交换 ——> 交换后得到的数 就是 字典序更高② 字典序高&#xff0c;但不代表其就是…

C++:继承

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一.继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承关系和访问限定符 1.2.3 继承基类成员访问方式的变化 二.基类和派生类对象赋值转换 三.继承中的…

代码随想录训练第十一天|二叉树基础理论、二叉树递归遍历、二叉树迭代遍历、二叉树统一迭代法、LeetCode102.二叉树层序遍历

文章目录 二叉树理论基础二叉树种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树存储方式二叉树遍历方式二叉树的定义总结 二叉树的递归遍历思路前序遍历后序遍历中序遍历 二叉树的迭代遍历思路前序遍历&#xff08;迭代法&#xff09;中序遍历&#xff08;迭代法&#…

opencv 鱼眼图像的矫正(动态参数调整)

一&#xff1a;棋盘校准参数说明(内参) 棋盘校准的方法及代码很多&#xff0c;参见其他连接 1&#xff1a;内参矩阵 2&#xff1a;畸变系数 针对鱼眼相机此处是4个参数&#xff0c;在其校准代码中也可以知道&#xff0c;其通常的定义如下&#xff1a; data.camera_mat np.e…