QTableWidget——表格的合并与拆分

一、整体思路

表格的操作使用QTableView::setSpan可以实现表格的行和列的合并
表格拆分没有对应的处理函数
主要思路:对表格的属性、内容、拆分与合并的参数进行存储,在进行拆分时对表格内容进行重新创建(不考虑效率问题)

二、效果

1、合并效果
合并操作,是将要合并的项进行了覆盖,被合并的项只是被隐藏了
在这里插入图片描述
2、拆分效果
在这里插入图片描述

三、部分测试代码

//合并操作
void MainWindow::onSpanCell()
{QModelIndexList list = m_table->selectionModel()->selectedIndexes();if (list.size() < 2){QMessageBox::warning(this, "单元格合并", "所选中单元格中为单个单元格,无法合并", "确定");return;}int minRow = 0;int maxRow = 0;int minCol = 0;int maxCol = 0;QList<QTableWidgetSelectionRange> vec = m_table->selectedRanges();if (vec.size() > 0){minRow = vec[0].topRow();maxRow = vec[0].topRow();minCol = vec[0].leftColumn();maxCol = vec[0].rightColumn();}for (auto v : vec){if (minRow > v.topRow()){minRow = v.topRow();}if (maxRow < v.bottomRow()){maxRow = v.bottomRow();}if (minCol > v.leftColumn()){minCol = v.leftColumn();}if (maxCol < v.rightColumn()){maxCol = v.rightColumn();}}int rowSpan = (maxRow - minRow) + 1;int colSpan = (maxCol - minCol) + 1;m_table->setSpan(minRow, minCol, rowSpan, colSpan);for(auto& pRowInfro:m_tableInfor){if(pRowInfro.first==minRow){for(auto& pColInfro:pRowInfro.second){if(pColInfro.first==minCol){pColInfro.second->rowSpan = rowSpan;pColInfro.second->colSpan = colSpan;}}}}
}
//拆分
void MainWindow::onSplitCell()
{QList<QTableWidgetSelectionRange> vec = m_table->selectedRanges();if (vec.size() < 2){QMessageBox::warning(this, QString::fromLocal8Bit("拆分表格失败"), "单元格已是最小颗粒度,不能再进行拆分", "确定");return;}int row,col;for (auto i : vec){row = i.topRow();col = i.leftColumn();for(auto& pRowInfro:m_tableInfor){if( pRowInfro.first == row ){for(auto& pColInfro:pRowInfro.second){if(pColInfro.first == col){pColInfro.second->rowSpan = 0;pColInfro.second->colSpan = 0;}}}}}createTable();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/194129.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++ 语言 ‘ == ‘ 运算符仅适用于算数表达式

示例代码&#xff1a; #include <stdio.h>typedef struct {int a;int b; } TestStruct;int main(void) {TestStruct testA { 0 }, testB { 0 };if (testA testB) {printf("You can do this!\n");}return 0; }

HTTP1.0协议详解

前言主要特点存在的不足与HTTP1.1的区别在Java中应用HTTP1.0协议知识拓展 前言 HTTP是由蒂姆伯纳斯李&#xff08;Tim Berners-Lee&#xff09;爵士创造的。他在1989年提出了一个构想&#xff0c;借助多文档之间相互关联形成的超文本&#xff08;HyperText&#xff09;&#x…

【心得】PHP的文件上传个人笔记

目录 1 php的文件上传绕过 黑名单绕过 2 php文件上传的00截断 3 iconv字符转换异常后造成了字符截断 4 文件后缀是白名单的时候的绕过 web服务器的解析漏洞绕过 5.高级文件上传绕过 1 .htaccess nginx.htaccess 2 服务端内容检测 3 配合伪协议来绕过 4.配合日志包含绕…

智能电力监测系统

智能电力监测系统是一种先进的电力监控技术&#xff0c;它结合了互联网、物联网、大数据、人工智能等先进技术&#xff0c;对电力系统的运行状态进行实时监测和分析。以下是智能电力监测系统的主要功能和优势&#xff1a; 一、主要功能&#xff1a; 实时数据监测&#xff1a;智…

时间序列与 statsmodels:预测所需的基本概念(2)

时间序列与 statsmodels&#xff1a;预测所需的基本概念&#xff08;2&#xff09; 维托米尔约万诺维奇 跟随 出版于 走向发展 4 分钟阅读 2022 年 1 月 31 日 8 一、说明 在使时间序列平稳后&#xff0c;在本博客中我们应用 SARIMAX 预测并进行深入解释。 二、关于平稳性 …

接口自动化测试中解决接口间数据依赖

在实际的测试工作中&#xff0c;在做接口自动化测试时往往会遇到接口间数据依赖问题&#xff0c;即API_03的请求参数来源于API_02的响应数据&#xff0c;API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时&#xff0c;需要预先请求API_02接口&a…

轻松掌控财务,分析账户花销,明细记录支出情况

随着科技的发展&#xff0c;我们的生活变得越来越智能化。然而&#xff0c;对于许多忙碌的现代人来说&#xff0c;管理财务可能是一件令人头疼的事情。复杂的账单、花销、收入&#xff0c;这些可能会让你感到无从下手。但现在&#xff0c;我们有一个全新的解决方案——一款全新…

[qemu逃逸] XNUCA2019-vexx

前言 这题没有去符合, 题目本身不算难. 用户名: root 密码: goodluck 设备逆向 题目没有去符合, 所以其实没啥好讲了, 就列一些笔者认为关键的地方 这里的定义了两块 mmio 内存区. 然后看下设备实例结构体: 可以看到 QEMUTimer, 所以多半就是劫持 dma_timer 了. 漏洞点在…

传输层协议-TCP协议

目录 TCP协议格式理解可靠性序号与确认序号16位窗口大小六个标志位连接管理机制三次握手四次挥手 确认应答机制&#xff08;ACK&#xff09;超时空重传机制流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议TCP/UDP对比用UDP实现…

【STL】:反向迭代器

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关反向迭代器的模拟实现&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

吐血整理,金融银行测试的“火“到底在哪里?银行测试真正实施...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 银行里的软件测试…

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于金鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…