QTableWidget之表格列的隐藏与显示(折叠)
- 其他
- 2025-09-11 15:15:02

今天晚上花点时间研究一下表格列的显隐问题(类似与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_H2.按钮位置设置与信号槽绑定过程
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()); }QTableWidget之表格列的隐藏与显示(折叠)由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“QTableWidget之表格列的隐藏与显示(折叠)”
上一篇
2025.3.4
下一篇
C#—csv文件格式操作