目录
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();
}