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

QTableWidget之表格列的隐藏与显示(折叠)

今天晚上花点时间研究一下表格列的显隐问题(类似与excel的隐藏列功能),在网络上搜罗了一通资料,没现成的例子作为借鉴,只能自己研究编写了。现在将过程记录下来,以便日后翻阅。
首先声明:因为时间仓促,以下例子写的不是很规范,只是为了实现特定功能,如果哪位仁兄想要借鉴,只能自己完善优化以下了。示例运行后的如下图所示:
在这里插入图片描述
在这里插入图片描述

1.创建项目工程

1.创建TableLearn工程,只包括以下文件。
在这里插入图片描述
2.资源mainwindow.ui中拉入一个QTableWidget,瞎输入几行几列。其中类目1、类目2、类目3左右显隐节点,分别显隐对应的子集。
在这里插入图片描述

2.显隐按钮添加

1.在类目1、类目2、类目3位置创建3个按钮,分别用于显隐触发各自的子项。按钮存放到QButtonGroup中用于统一建议按钮的信号槽映射关系。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QButtonGroup>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();void UpdateButtonPos(int buttonId);
private slots:void on_buttonClicked(int id);
private:Ui::MainWindow *ui;QButtonGroup *m_buttonGroup;
};
#endif // MAINWINDOW_H

2.按钮位置设置与信号槽绑定过程

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_buttonGroup = new QButtonGroup();QPushButton *button1 = new QPushButton("-",this);QTableWidgetItem *item = ui->tableWidget->item(0,0);//获取单元格坐标位置QRect rect = ui->tableWidget->visualItemRect(item);button1->setGeometry(rect.x() + rect.width(),rect.y(),36,36);m_buttonGroup->addButton(button1,0);QPushButton *button3 = new QPushButton("-",this);item = ui->tableWidget->item(0,3);//获取单元格坐标位置rect = ui->tableWidget->visualItemRect(item);button3->setGeometry(rect.x() + rect.width(),rect.y(),36,36);m_buttonGroup->addButton(button3,3);QPushButton *button6 = new QPushButton("-",this);item = ui->tableWidget->item(0,6);//获取单元格坐标位置rect = ui->tableWidget->visualItemRect(item);button6->setGeometry(rect.x() + rect.width(),rect.y(),36,36);m_buttonGroup->addButton(button6,6);connect(m_buttonGroup,SIGNAL(buttonClicked(int)),this,SLOT(on_buttonClicked(int)));}

3. 按钮点击处理

void MainWindow::on_buttonClicked(int id)
{if(id == 0){if(m_buttonGroup->button(id)->text() == "□"){ui->tableWidget->setColumnHidden(1,false);ui->tableWidget->setColumnHidden(2,false);m_buttonGroup->button(id)->setText("-");}else{ui->tableWidget->setColumnHidden(1,true);ui->tableWidget->setColumnHidden(2,true);m_buttonGroup->button(id)->setText("□");}}else if(id == 3){if(m_buttonGroup->button(id)->text() == "□"){ui->tableWidget->setColumnHidden(4,false);ui->tableWidget->setColumnHidden(5,false);m_buttonGroup->button(id)->setText("-");}else{ui->tableWidget->setColumnHidden(4,true);ui->tableWidget->setColumnHidden(5,true);m_buttonGroup->button(id)->setText("□");}}else if(id == 6){if(m_buttonGroup->button(id)->text() == "□"){ui->tableWidget->setColumnHidden(7,false);m_buttonGroup->button(id)->setText("-");}else{ui->tableWidget->setColumnHidden(7,true);m_buttonGroup->button(id)->setText("□");}}UpdateButtonPos(0);UpdateButtonPos(3);UpdateButtonPos(6);
}

4.按钮位置更新

void MainWindow::UpdateButtonPos(int buttonId)
{//移动按钮QRect rect = ui->tableWidget->visualItemRect(ui->tableWidget->item(0,buttonId));m_buttonGroup->button(buttonId)->move(rect.x()+rect.width(),rect.y());
}
http://www.lryc.cn/news/546348.html

相关文章:

  • Leetcode3146. 两个字符串的排列差
  • 二百八十五、华为云PostgreSQL——建分区表并设置主键
  • 系统架构设计师-第3章 数据库设计
  • SAP MDG —— MDG on S/4HANA 2023 FPS03 创新汇总
  • 软考中级-数据库-3.2 数据结构-数组和矩阵
  • 有符号数和无符号数的加减运算
  • 动态链接器(十):重定位
  • EGO-Planner的无人机视觉选择(yolov5和yolov8)
  • IO标准函数和时间函数
  • 为AI聊天工具添加一个知识系统 之133 详细设计之74通用编程语言 之4 架构及其核心
  • 【零基础到精通Java合集】第二十三集:G1收集器深度解析
  • 似然函数与极大似然估计
  • QSFP(Quad Small Form-factor Pluggable)详解
  • WDM_OTN_基础知识_波分系统基本构成-无源器件
  • 【音视频】ffmpeg音视频处理基本流程
  • 【网络编程】之TCP实现客户端远程控制服务器端及断线重连
  • 云原生容器编排:构建智能弹性应用的自动化引擎
  • centos虚拟机安装
  • 社会力模型:Social force model for pedestrian dynamics
  • 机器学习数学通关指南
  • 【Mac】2025-MacOS系统下常用的开发环境配置
  • # C# 中堆(Heap)与栈(Stack)的区别
  • ubuntu离线安装nvidia-container-runtime
  • 用Python+Flask打造可视化武侠人物关系图生成器:从零到一的实战全记录
  • 学习笔记-DeepSeek在开源第四天发布DualPipe和EPLB两项技术
  • C++入门基础知识1
  • 神经网络AI原理回顾
  • PPT 小黑第38套
  • 主时钟与虚拟时钟约束
  • K8S学习之基础六:k8s中pod亲和性