Qt之表小部件---TableWidget

1、概述

**①、**QTableWidget类提供具有默认模型的基于项的表视图
**②、**表小部件为应用程序提供标准的表显示工具。QTableWidget类中的项由QTableWidgettem类提供。
**③、**如果需要使用自己的数据模型的表,则应使用QTableView而不是QTableWidget类。
**④、**可以使用所需的行数和列数构造表小部件

2、举例演示

2.1、建立一个员工信息表

在这里插入图片描述

通过Qt编译器编译之后,首先显示出来一个空表,当然一个空表很简单的几行代码就可以实现,包括所添加的标题以及条目的上标。在这我只列出3x3的表格,可以根据自己情况来设定。

    this->setWindowTitle("员工信息表");
    ui->tableWidget->setRowCount(3);//设置表的行号
    ui->tableWidget->setColumnCount(3);//设置表的列号
    QStringList header;
    header<< "姓名" << "年龄" << "薪水";
    ui->tableWidget->setHorizontalHeaderLabels(header);//设置行条目标题

2.2、编写一个JSON文件

 //1、获取数据
    staff s1;
    s1.setName("张三");
    s1.setAge("20");
    s1.setSalary("20000")
    
    staff s2;
    s2.setName("李四");
    s2.setAge("21");
    s2.setSalary("21000");
    
    staff s3;
    s3.setName("王五");
    s3.setAge("22");
    s3.setSalary("22000");

//2、将数据转换为json格式
    QJsonObject obj1;
    obj1.insert("Name",s1.getName());
    obj1.insert("Age",s1.getAge());
    obj1.insert("Salary",s1.getSalary());

    QJsonObject obj2;
    obj2.insert("Name",s2.getName());
    obj2.insert("Age",s2.getAge());
    obj2.insert("Salary",s2.getSalary());

    QJsonObject obj3;
    obj3.insert("Name",s3.getName());
    obj3.insert("Age",s3.getAge());
    obj3.insert("Salary",s3.getSalary());

    QJsonArray array;
    array.insert(0,obj1);
    array.insert(1,obj2);
    array.insert(2,obj3);

    QJsonObject obj;
    obj.insert("Staff",array);

//3、将数据写入json文件中
     QJsonDocument doc;
     doc.setObject(obj);
     QByteArray data = doc.toJson();

     QFile file("myJson.json");
     file.open(QIODevice::WriteOnly);
     file.write(data);
     file.close();

看到这些代码,是不感觉特别繁琐,当然了,这只是为了初学者,方便理解的,通俗易懂。细心的你应该会问: getName()是系统自带的吗?setName是自定义还是系统自带的,这些从哪来的?
这些不难,来接着往下看。

staff.h头文件
#ifndef STAFF_H
#define STAFF_H
#include <QString>
class staff
{
public:
    staff();
    QString getName() const;
    void setName(const QString &value);
    
    QString getAge() const;
    void setAge(const QString &value);

    QString getSalary() const;
    void setSalary(const QString &value);

private:
    QString Name;
    QString Age;
    QString Salary;
};
#endif // STAFF_H

对C++或者Qt稍微了解点的同学,就会立马看出来,这些函数是Qt编译器通过以下操作来实现的

在这里插入图片描述

对应的.cpp文件如下所示

#include "staff.h"
staff::staff()
{
}
//获取员工名字
QString staff::getName() const
{
    return Name;
}
//设置员工名字
void staff::setName(const QString &value)
{
    Name = value;
}
//获取员工年龄
QString staff::getAge() const
{
    return Age;
}
//设置员工年龄
void staff::setAge(const QString &value)
{
    Age = value;
}
//获取员工薪水
QString staff::getSalary() const
{
    return Salary;
}
//设置员工薪水
void staff::setSalary(const QString &value)
{
    Salary = value;
}

2.3、引入列表----QList类

2.3.1、QList类概述

①、 QList类是一个提供列表的模板类
②、 QList是Qt的通用容器类之一。它将项存储在一个列表中,该列表提供基于索引的快速访问和基于索引的插入和删除。
③、 QList、QLinkedList和QVector提供类似的api和功能。它们通常是可以互换的,但也有性能方面的影响。
④、 如果您需要一个真正的链表,该链表保证在链表中间插入恒定时间,并且对项使用迭代器而不是索引,请使用QLinkedList。

2.3.2、举例使用QList
 QList <staff> StaffLsit;

2.4、查询员工信息表

①、 在这,使用son文件,首先要会解析json文件,我之前的博客中有讲到如何解析json文件,还没有学会的同学可以了解以下。https://blog.csdn.net/weixin_44585751/article/details/105713434
②、 使用列表来遍历查找数据。

//查询
void MainWindow::on_serchPushButton_clicked()
{
//解析json文件
    QFile file("myJson.json");
    file.open(QIODevice::ReadOnly);
    QByteArray data = file.readAll();
    QJsonDocument doc = QJsonDocument::fromJson(data);
    QJsonObject obj = doc.object();
    QJsonArray array = obj.value("Staff").toArray();
    for(int i=0; i<array.size(); i++)
    {
        QJsonObject Staff = array.at(i).toObject();
        QString name = Staff.value("Name").toString();
        QString age = Staff.value("Age").toString();
        QString salary = Staff.value("Salary").toString();

         staff t;
        StaffLsit.insert(i,t);//调用链表中数据
        switch (i)
        {
            case 0:
                ui->tableWidget->setItem(0,0,new      QTableWidgetItem(name));
                ui->tableWidget->setItem(0,1,new QTableWidgetItem(age));
                ui->tableWidget->setItem(0,2,new QTableWidgetItem(salary));
            case 1:
                ui->tableWidget->setItem(1,0,new QTableWidgetItem(name));
                ui->tableWidget->setItem(1,1,new QTableWidgetItem(age));
                ui->tableWidget->setItem(1,2,new QTableWidgetItem(salary));
            case 2:
                ui->tableWidget->setItem(2,0,new QTableWidgetItem(name));
                ui->tableWidget->setItem(2,1,new QTableWidgetItem(age));
                ui->tableWidget->setItem(2,2,new QTableWidgetItem(salary));
          }
    }
    file .close();
}

在这里插入图片描述

2.5、删除员工信息

要想删除某一个员工的信息,首先要找到该员工所在位置。

//删除数据 要想删除数据,首要获取当前被选中条目信息
void MainWindow::on_deletePushButton_clicked()
{
    QTableWidgetItem * currentItem = ui->tableWidget->currentItem();//获取当前选中条目
    int row = currentItem->row();//获取当前选中条目的行号
    int col = currentItem->column();//获取当前选中条目的列号
    ui->tableWidget->removeRow(row);//删除选中条目的行号
//    ui->tableWidget->removeColumn(col);//删除选中条目列号
//    ui->tableWidget->removeCellWidget(row,col);//只删除当前选中条目
//根据自己情况来设置删除规则
}

在这里插入图片描述

2.6、保存员工信息表

//保存员工信息数据表
void MainWindow::on_savePushButton_clicked()
{
    int row = ui->tableWidget->currentRow();
    ui->tableWidget->currentItem()->data(row).toString();
}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44585751

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值