博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt 表格类QTableWidget实现表格操作
阅读量:6634 次
发布时间:2019-06-25

本文共 7913 字,大约阅读时间需要 26 分钟。

  hot3.png

需求是有一堆数据(非数据库,如果是数据库可以用其他的)需要显示出来,并支持修改。

1、新增行;

2、新增列;

3、修改单个值;

4、获得总行数和总列数;

5、获得选中的坐标和值。

比较喜欢先用creator先画一个大概,全部用代码实现也可以,但是新手。。

实现效果(暂时):

以下的关键代码:

声明:

1: 
2: public slots:
3:     void getTotalColumn();
4:     void getTotalRow();
5:     void getCurrentRow(QTableWidgetItem* item);
6:     void getCurrentColumn(QTableWidgetItem* item);
7:     void getCurrentValue(QTableWidgetItem* item);
8:     void getCurrentItem(QTableWidgetItem* item);
9:     void addRow();
10:     void addColumn();
11:     void delRow();
12:     void delColumn();
13: };

 

信号槽(参数表中并不需要带上形参):

1: connect(ui->pushButton_total, SIGNAL(clicked(bool)), this, SLOT(getTotalColumn()));
2: connect(ui->pushButton_total, SIGNAL(clicked(bool)), this, SLOT(getTotalRow()));
3: connect(ui->tableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(getCurrentItem(QTableWidgetItem*)));
4: connect(ui->pushButton_addRow, SIGNAL(clicked(bool)), this, SLOT(addRow()));
5: connect(ui->pushButton_addColumn, SIGNAL(clicked(bool)), this, SLOT(addColumn()));
6: connect(ui->pushButton_delRow, SIGNAL(clicked(bool)), this, SLOT(delRow()));
7: connect(ui->pushButton_delColumn, SIGNAL(clicked(bool)), this, SLOT(delColumn()));
 
实现:
1: 
2: void MainWindow::getTotalColumn(){
3:     QString totalColumn = QString::number(ui->tableWidget->columnCount(), 10);
4:     ui->lineEdit_totalColumn->setText(totalColumn);
5:     qDebug() << "total column::" << totalColumn;
6: }
7: 
8: void MainWindow::getTotalRow(){
9:     QString totalRow = QString::number(ui->tableWidget->rowCount(), 10);
10:     ui->lineEdit_totalRow->setText(totalRow);
11:     qDebug() << "total row::" << totalRow;
12: }
13: 
14: void MainWindow::getCurrentItem(QTableWidgetItem* item){
15:     getCurrentColumn(item);
16:     getCurrentRow(item);
17:     getCurrentValue(item);
18: }
19: 
20: void MainWindow::getCurrentRow(QTableWidgetItem* item){
21:     QString currentRow = QString::number(item->row(), 10);
22:     ui->lineEdit_CurrentRow->setText(currentRow);
23:     qDebug() << "current row::" << currentRow;
24: }
25: 
26: void MainWindow::getCurrentColumn(QTableWidgetItem *item){
27:     QString currentColumn = QString::number(item->column(), 10);
28:     ui->lineEdit_CurrentColumn->setText(currentColumn);
29:     qDebug() << "current column::" << currentColumn;
30: }
31: 
32: void MainWindow::getCurrentValue(QTableWidgetItem *item){
33:     ui->lineEdit_CurrentValue->setText(item->text());
34:     qDebug() << "current value::" << item->text();
35: }
36: 
37: void MainWindow::addRow(){
38:     int totalRow = ui->tableWidget->rowCount();
39:     //int totalColumn = ui->tableWidget->columnCount();
40: 
41:     ui->tableWidget->setRowCount(totalRow + 1);
42: 
43:     // 默认自增
44:     //QTableWidgetItem *newHead = new QTableWidgetItem(QString("%1").arg(totalRow+1));
45:     //ui->tableWidget->setVerticalHeaderItem(totalRow, newHead);
46: 
47:     /*
48:     QTableWidgetItem *item = new QTableWidgetItem;
49:     //item->setText(QString("%1").arg(5));
50:     for(int i = 0; i < totalColumn; i++){
51:         ui->tableWidget->setItem(totalRow, i, item);
52:     }*/
53: }
54: 
55: void MainWindow::addColumn(){
56:     int totalColumn = ui->tableWidget->columnCount();
57:     ui->tableWidget->setColumnCount(totalColumn + 1);
58: }
59: 
60: void MainWindow::delRow(){
61:     ui->tableWidget->removeRow(ui->tableWidget->currentRow());
62: }
63: 
64: void MainWindow::delColumn(){
65:     ui->tableWidget->removeColumn(ui->tableWidget->currentColumn());
66: }

代码地址:

别问我为什么不是osc。。。求放过。。

下面为项目建立过程,仅供新手看:

新建项目:

填一个项目名:

新建项目完毕:

打开mainwindow.ui

设计并完成命名(命名按自己习惯):

在头文件mainwindow.h中新增槽函数

1: #ifndef MAINWINDOW_H
2: #define MAINWINDOW_H
3: 
4: #include 
5: #include 
6: #include 
7: #include 
8: 
9: namespace Ui {
10: class MainWindow;
11: }
12: 
13: class MainWindow : public QMainWindow
14: {
15:     Q_OBJECT
16: 
17: public:
18:     explicit MainWindow(QWidget *parent = 0);
19:     ~MainWindow();
20: 
21: private:
22:     Ui::MainWindow *ui;
23: 
24: public slots:
25:     void getTotalColumn();
26:     void getTotalRow();
27:     void getCurrentRow(QTableWidgetItem* item);
28:     void getCurrentColumn(QTableWidgetItem* item);
29:     void getCurrentValue(QTableWidgetItem* item);
30:     void getCurrentItem(QTableWidgetItem* item);
31:     void addRow();
32:     void addColumn();
33:     void delRow();
34:     void delColumn();
35: };
36: 
37: #endif // MAINWINDOW_H

在mainwindow.cpp中定义:

1: #include "mainwindow.h"
2: #include "ui_mainwindow.h"
3: 
4: MainWindow::MainWindow(QWidget *parent) :
5:     QMainWindow(parent),
6:     ui(new Ui::MainWindow){
7:     ui->setupUi(this);
8:     connect(ui->pushButton_total, SIGNAL(clicked(bool)), this, SLOT(getTotalColumn()));
9:     connect(ui->pushButton_total, SIGNAL(clicked(bool)), this, SLOT(getTotalRow()));
10:     connect(ui->tableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), this, SLOT(getCurrentItem(QTableWidgetItem*)));
11:     connect(ui->pushButton_addRow, SIGNAL(clicked(bool)), this, SLOT(addRow()));
12:     connect(ui->pushButton_addColumn, SIGNAL(clicked(bool)), this, SLOT(addColumn()));
13:     connect(ui->pushButton_delRow, SIGNAL(clicked(bool)), this, SLOT(delRow()));
14:     connect(ui->pushButton_delColumn, SIGNAL(clicked(bool)), this, SLOT(delColumn()));
15: }
16: 
17: MainWindow::~MainWindow(){
18:     delete ui;
19: }
20: // 获得总列数
21: void MainWindow::getTotalColumn(){
22:     // 将int按十进制转成QString
23:     QString totalColumn = QString::number(ui->tableWidget->columnCount(), 10);
24:     ui->lineEdit_totalColumn->setText(totalColumn);
25:     qDebug() << "total column::" << totalColumn;
26: }
27: // 获得总行数
28: void MainWindow::getTotalRow(){
29:     QString totalRow = QString::number(ui->tableWidget->rowCount(), 10);
30:     ui->lineEdit_totalRow->setText(totalRow);
31:     qDebug() << "total row::" << totalRow;
32: }
33: 
34: // 当某一项修改时(包括新增时),获得当前项
35: void MainWindow::getCurrentItem(QTableWidgetItem* item){
36:     getCurrentColumn(item);
37:     getCurrentRow(item);
38:     getCurrentValue(item);
39: }
40: // 获得当前行
41: void MainWindow::getCurrentRow(QTableWidgetItem* item){
42:     QString currentRow = QString::number(item->row(), 10);
43:     ui->lineEdit_CurrentRow->setText(currentRow);
44:     qDebug() << "current row::" << currentRow;
45: }
46: // 获得当前列
47: void MainWindow::getCurrentColumn(QTableWidgetItem *item){
48:     QString currentColumn = QString::number(item->column(), 10);
49:     ui->lineEdit_CurrentColumn->setText(currentColumn);
50:     qDebug() << "current column::" << currentColumn;
51: }
52: // 获得当前值
53: void MainWindow::getCurrentValue(QTableWidgetItem *item){
54:     ui->lineEdit_CurrentValue->setText(item->text());
55:     qDebug() << "current value::" << item->text();
56: }
57: 
58: // 增加一行
59: void MainWindow::addRow(){
60:     int totalRow = ui->tableWidget->rowCount();
61:     //int totalColumn = ui->tableWidget->columnCount();
62: 
63:     ui->tableWidget->setRowCount(totalRow + 1);
64: 
65:     // 默认自增
66:     //QTableWidgetItem *newHead = new QTableWidgetItem(QString("%1").arg(totalRow+1));
67:     //ui->tableWidget->setVerticalHeaderItem(totalRow, newHead);
68: 
69:     /*
70:     QTableWidgetItem *item = new QTableWidgetItem;
71:     //item->setText(QString("%1").arg(5));
72:     for(int i = 0; i < totalColumn; i++){
73:         ui->tableWidget->setItem(totalRow, i, item);
74:     }*/
75: }
76: 
77: // 增加一列
78: void MainWindow::addColumn(){
79:     int totalColumn = ui->tableWidget->columnCount();
80:     ui->tableWidget->setColumnCount(totalColumn + 1);
81: }
82: 
83: // 删除选中的行(一定要选中并且总列数大于0)
84: void MainWindow::delRow(){
85:     ui->tableWidget->removeRow(ui->tableWidget->currentRow());
86: }
87: 
88: // 删除选中的列(一定要选中并且总行数大于0)
89: void MainWindow::delColumn(){
90:     ui->tableWidget->removeColumn(ui->tableWidget->currentColumn());
91: }

转载于:https://my.oschina.net/htzy/blog/501247

你可能感兴趣的文章
ACK容器服务发布virtual node addon,快速部署虚拟节点提升集群弹性能力 ...
查看>>
datax源码阅读四:TaskGroupContainer
查看>>
ConnectedLife与Ocean Protocol合作对抗帕金森病
查看>>
爬虫老崩溃咋整 ?retrying模块了解一下!
查看>>
Android 常用的地球经纬度转换公里(km)计算工具类 ...
查看>>
详解 JS 中 new 调用函数原理
查看>>
作业一——根据成绩计算出至少需要发多少奖金才能让所有的组满意。 ...
查看>>
零基础的你还在纠结怎么学习Python编程吗?
查看>>
Android数据库新王者-Realm入门教程
查看>>
5个月打造极致店内用户体验,看 Docker 如何帮助 Desigual 提升店内销售额 ...
查看>>
【翻译】Sklearn与TensorFlow机器学习实用指南 —— 第16章 强化学习(上)
查看>>
Python第一讲——高质量数据挖掘模型开发七步法
查看>>
【镜像更新】Windows Server 2008 R2 企业版
查看>>
PostgreSQL GUI pgadmin4 v3.3 支持 gis geometry 数据编辑、显示
查看>>
Mac OS 下安装 Vagrant
查看>>
都 9012 年了,为什么汽车厂商还没全面倒向 OTA 升级?
查看>>
1G到5G的分野之战,通信洗牌即将开始
查看>>
k8s的资源分配
查看>>
lnmp环境的abbix3.0.2报错
查看>>
(1)docker安装、镜像管理-导入导出
查看>>