当前位置: 首页 > 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_OBJECT

public:
    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());
}

相关文章:

  • C++并发以及多线程的秘密
  • C#—csv文件格式操作
  • stm32移植LCD2002驱动
  • 爬虫逆向实战小记——解决webpack实记
  • 歌叽歌叽V2.0.5--原创音乐制作工具安装与部署
  • linux 如何查看gpu使用情况
  • 深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
  • Java分支和循环结构详解/while/do while /for循环详解/死循环/Random用法
  • 如何优化Android应用的性能
  • leetcode113-路径总和II
  • STM32---FreeRTOS中断管理试验
  • WebP2P技术在嵌入式设备中的应用:EasyRTC音视频通话SDK如何实现高效通信?
  • Baklib内容中台赋能企业智管
  • FastGPT 源码:如何实现 “问题优化“
  • 【Canny 边缘检测详细讲解】
  • 深度学习-大白话解释循环神经网络RNN
  • C高级linux
  • 基于51单片机的汽车防撞系统proteus仿真
  • 《人工智能与民生》: llama3.2-vision 的初稿
  • React Native 实现滑一点点内容区块指示器也滑一点点
  • 佛山网站排名推广/seoapp推广
  • 2015做导航网站/12345浏览器网址大全
  • 怎么看网站pr值/百度普通收录
  • 面对撞库 网站应该怎么做/优化关键词具体要怎么做
  • 网络推广做哪个网站比较好/环球网疫情最新动态
  • 潍坊360做网站怎么样/网络营销推广方案论文