//客户端
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
//通信套接字
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include<QTcpSocket>
#include <QTreeWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
//显示全部信息
void showAll();
//显示树状图
void showStudentTree();
void showTeacherTree();
//解析收到的数据
void analyseData();
//插入新的数据
void insertData();
//删除数据
void deleteData();
//修改数据‘
void updateData();
//查找信息
void searchData();
//批量导入学生信息
void importData();
private slots:
void on_btnConnect_clicked();
void on_btnSend_clicked();
void on_btnClose_clicked();
void on_actionView_triggered();
void on_actionModif_triggered();
void on_btnGetClass_clicked();
void on_btnGet_clicked();
void on_btnAdd_clicked();
void on_btnDelete_clicked();
void on_btnSearch_clicked();
void on_btnImport_clicked();
void on_btnGetTeacher_clicked();
void on_btnUpdate_clicked();
private:
Ui::MainWindow *ui;
//通信套接字
QTcpSocket *tcpSocket;
QJsonArray jsonArray;
QJsonObject obj;
QJsonObject sendJson;
QJsonDocument jsonDoc;
};
#endif // MAINWINDOW_H
客户端.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHostAddress>
#include <QJsonObject>
#include<QJsonDocument>
#include<QJsonArray>
#include <QFile>
#include <QDomDocument>
#include<QFileDialog>
#pragma execution_character_set("utf-8")
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("客户端");
tcpSocket=NULL;
//分配空间,指定父对象
tcpSocket=new QTcpSocket(this);
//
connect(tcpSocket,&QTcpSocket::connected,[=](){
ui->textEditRead->setText("成功和服务器建立连接");
});
showAll();
//设置默认显示页面
ui->stackedWidget->setCurrentIndex(0);
ui->tabWidget->setCurrentIndex(0);
//设置窗口大小固定
window()->setFixedSize(758,607);
}
MainWindow::~MainWindow()
{
delete ui;
}
//以表格形式显示数据库的信息 使得可以对上面的数据进行操作
void MainWindow::showAll()
{
//用于存储学生的姓名
QStringList nameList;
//年龄数组
QStringList ageList;
//班级
QStringList classList;
//必须先设置好表格的行列数 不然表格无法显示
//设置行数
ui->tableWidget->setRowCount(jsonArray.size());
//列数
ui->tableWidget->setColumnCount(3);
//设置水平表头
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"姓名"<<"年龄"<<"班级");
//解析jsonarray
for(int i=0;i<jsonArray.size();i++){
QJsonObject json=jsonArray.at(i).toObject();
//按班级分组
nameList.append(json.value("姓名").toString());
ageList.append(json.value("年龄").toString());
classList.append(json.value("班级").toString());
}
for(int i=0;i<jsonArray.size();i++)
{
int col=0;
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(nameList[i]));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(ageList[i]));
ui->tableWidget->setItem(i,col++,new QTableWidgetItem(classList[i]));
}
}
//显示树状图——定义了好多变量
void MainWindow:: showStudentTree()
{
QStringList listTop;
QStringList s1;
QStringList s2;
QStringList s3;
QStringList s4;
QTreeWidgetItem *itemTop1= new QTreeWidgetItem;
QTreeWidgetItem *itemTop2 = new QTreeWidgetItem;
QTreeWidgetItem *itemTop3 = new QTreeWidgetItem;
QTreeWidgetItem *itemTop4 = new QTreeWidgetItem;
QTreeWidgetItem *itemChild1 = new QTreeWidgetItem;
QTreeWidgetItem *itemChild2 = new QTreeWidgetItem;
QTreeWidgetItem *itemChild3 = new QTreeWidgetItem;
QTreeWidgetItem *itemChild4 = new QTreeWidgetItem;
//用来存储QTreeWidgetItem
QList<QTreeWidgetItem*> list1;
QList<QTreeWidgetItem*> list2;
QList<QTreeWidgetItem*> list3;
QList<QTreeWidgetItem*> list4;
for(int i=0;i<jsonArray.size();i++)
{
QJsonObject json=jsonArray.at(i).toObject();
//按班级分组
QString str=json.value("班级").toString();
if(str=="1班")
{
// s1.append(json.value("学生姓名").toString());
s1=QStringList(json.value("学生姓名").toString());
itemTop1=new QTreeWidgetItem(QStringList(str));
itemChild1 = new QTreeWidgetItem(s1);
list1.append(itemChild1);
}
if(str=="2班")
{
s2=QStringList(json.value("学生姓名").toString());
itemTop2=new QTreeWidgetItem(QStringList(str));
itemChild2 = new QTreeWidgetItem(s2);
list2.append(itemChild2);
}
if(str=="3班")
{
s3=QStringList(json.value("学生姓名").toString());
itemTop3=new QTreeWidgetItem(QStringList(str));
itemChild3 = new QTreeWidgetItem(s3);
list3.append(itemChild3);
}
if(str=="4班")
{
s4=QStringList(json.value("学生姓名").toString());
itemTop4=new QTreeWidgetItem(QStringList(str));
itemChild4 = new QTreeWidgetItem(s4);
list4.append(itemChild4);
}
}
itemTop1->addChildren(list1);
itemTop2->addChildren(list2);
itemTop3->addChildren(list3);
itemTop4->addChildren(list4);
ui->treeWidgetClass->addTopLevelItem(itemTop1);
ui->treeWidgetClass->addTopLevelItem(itemTop2);
ui->treeWidgetClass->addTopLevelItem(itemTop3);
ui->treeWidgetClass->addTopLevelItem(itemTop4);
ui->treeWidgetClass->setHeaderLabels(QStringList()<<"班级");
ui->treeWidgetClass->expandAll();
}
//显示班级-老师树状图
void MainWindow::showTeacherTree()
{
QStringList listTop;
QStringList s1;
QStringList s2;
QStringList s3;
QStringList s4;
QTreeWidgetItem *itemTop1= new QTreeWidgetItem;
QTreeWidgetItem *itemTop2 = new QTreeWidgetItem;
QTreeWidgetItem *itemTop3 = new QTreeWidgetItem;
QTreeWidgetItem *itemTop4 = new QTreeWidgetItem;
QTreeWidgetItem *itemChild1 = new QTreeWidgetItem;
QTreeWidgetItem *itemChild2 = new QTreeWidgetItem;
QTreeWidgetItem *itemChild3 = new QTreeWidgetItem;
QTreeWidgetItem *itemChild4 = new QTreeWidgetItem;
//用来存储QTreeWidgetItem
QList<QTreeWidgetItem*> list1;
QList<QTreeWidgetItem*> list2;
QList<QTreeWidgetItem*> list3;
QList<QTreeWidgetItem*> list4;
for(int i=0;i<jsonArray.size();i++)
{
QJsonObject json=jsonArray.at(i).toObject();
//按班级分组
QString str=json.value("班级").toString();
if(str=="1班")
{
s1=QStringList(json.value("老师姓名").toString()+" "+json.value("职称").toString());
itemTop1=new QTreeWidgetItem(QStringList(str));
itemChild1 = new QTreeWidgetItem(s1);
list1.append(itemChild1);
}
if(str=="2班")
{
s2=QStringList(json.value("老师姓名").toString()+" "+json.value("职称").toString());
itemTop2=new QTreeWidgetItem(QStringList(str));
itemChild2 = new QTreeWidgetItem(s2);
list2.append(itemChild2);
}
if(str=="3班")
{
s3=QStringList(json.value("老师姓名").toString()+" "+json.value("职称").toString());
itemTop3=new QTreeWidgetItem(QStringList(str));
itemChild3 = new QTreeWidgetItem(s3);
list3.append(itemChild3);
}
if(str=="4班")
{
s4=QStringList(json.value("老师姓名").toString()+" "+json.value("职称").toString());
itemTop4=new QTreeWidgetItem(QStringList(str));
itemChild4 = new QTreeWidgetItem(s4);
list4.append(itemChild4);
}
}
itemTop1->addChildren(list1);
itemTop2->addChildren(list2);
itemTop3->addChildren(list3);
itemTop4->addChildren(list4);
ui->treeWidgetClass->addTopLevelItem(itemTop1);
ui->treeWidgetClass->addTopLevelItem(itemTop2);
ui->treeWidgetClass->addTopLevelItem(itemTop3);
ui->treeWidgetClass->addTopLevelItem(itemTop4);
ui->treeWidgetClass->setHeaderLabels(QStringList()<<"班级");
ui->treeWidgetClass->expandAll();
}
//解析收到的json数据
void MainWindow::analyseData()
{
connect(tcpSocket,&QTcpSocket::readyRead,[=](){
//获取对方发送的内容
QByteArray array=tcpSocket->readAll();
//转换成jsonobject
obj=QJsonDocument::fromJson(array).object();
//转换成jsonarray
jsonArray=obj.value("data").toArray();
if(obj.value("type").toString()=="1")
{
showStudentTree();
}
if(obj.value("type").toString()=="2")
{
showTeacherTree();
}
if(obj.value("type").toString()=="3")
{
showAll();
}
if(obj.value("type").toString()=="4")
{
showAll();
}
if(obj.value("type").toString()=="5")
{
showAll();
}
if(obj.value("type").toString()=="6")
{
showAll();
}
if(obj.value("type").toString()=="7")
{
showAll();
}
if(obj.value("type").toString()=="8")
{
showAll();
}
});
}
void MainWindow::on_btnConnect_clicked()
{
//获取服务器端口和ip
QString ip=ui->lineEditIp->text();
qint16 port=ui->lineEditPort->text().toInt();
//主动和服务器建立连接
tcpSocket->connectToHost(QHostAddress(ip),port);
}
void MainWindow::on_btnSend_clicked()
{
//获取编辑框内容
QString str=ui->textEditWrite->toPlainText();
//发送数据
tcpSocket->write(str.toUtf8().data());
//
}
void MainWindow::on_btnClose_clicked()
{
//主动和服务器断开连接
tcpSocket->disconnectFromHost();
tcpSocket->close();
}
void MainWindow::on_actionView_triggered()
{
ui->stackedWidget->setCurrentIndex(0);
}
//
void MainWindow::on_actionModif_triggered()
{
ui->stackedWidget->setCurrentIndex(1);
}
//点击显示班级-学生树状图
void MainWindow::on_btnGetClass_clicked()
{
ui->treeWidgetClass->clear();
QString type="1";
sendJson.insert("type",type);
jsonDoc.setObject(sendJson);
tcpSocket->write(jsonDoc.toJson());
analyseData();
qDebug()<<"显示树状图";
}
//点击显示班级-老师树状图
void MainWindow::on_btnGetTeacher_clicked()
{
QString type="2";
sendJson.insert("type",type);
jsonDoc.setObject(sendJson);
tcpSocket->write(jsonDoc.toJson());
analyseData();
}
//显示学生数据库的全部信息,并且可以进行增删查改操作
void MainWindow::on_btnGet_clicked()
{
ui->tableWidget->clear();
QString type="3";
sendJson.insert("type",type);
jsonDoc.setObject(sendJson);
tcpSocket->write(jsonDoc.toJson());
analyseData();
}
//增加数据
void MainWindow::on_btnAdd_clicked()
{
ui->tableWidget->clear();
QString type="4";
//查询的姓名
QString name=ui->lineEditName->text();
int age=ui->lineEditAge->text().toInt();
QString clss=ui->lineEditClass->text();
sendJson.insert("type",type);
sendJson.insert("姓名",name);
sendJson.insert("年龄",age);
sendJson.insert("班级",clss);
jsonDoc.setObject(sendJson);
tcpSocket->write(jsonDoc.toJson());
analyseData();
}
//删除指定数据
void MainWindow::on_btnDelete_clicked()
{
QString type="5";
//根据姓名删除指定数据
QString name=ui->lineEditName->text();
sendJson.insert("type",type);
sendJson.insert("姓名",name);
jsonDoc.setObject(sendJson);
tcpSocket->write(jsonDoc.toJson());
analyseData();
}
//查找指定数据
void MainWindow::on_btnSearch_clicked()
{
//ui->tableWidget->clear();
QString type="6";
//查询的姓名
QString name=ui->lineEditName->text();
sendJson.insert("type",type);
sendJson.insert("姓名",name);
jsonDoc.setObject(sendJson);
tcpSocket->write(jsonDoc.toJson());
analyseData();
}
//修改指定信息
void MainWindow::on_btnUpdate_clicked()
{
QString type="7";
//需要传入4个值
QString rename=ui->lineEdit->text();
QString name=ui->lineEditName->text();
int age=ui->lineEditAge->text().toInt();
QString clss=ui->lineEditClass->text();
sendJson.insert("type",type);
sendJson.insert("修改姓名",rename);
sendJson.insert("姓名",name);
sendJson.insert("年龄",age);
sendJson.insert("班级",clss);
jsonDoc.setObject(sendJson);
tcpSocket->write(jsonDoc.toJson());
analyseData();
}
//使用xml批量导入数据
void MainWindow::on_btnImport_clicked()
{
QJsonArray array;
QJsonObject obj;
QString file_path = QFileDialog::getOpenFileName(this, "请选择文件路径...", "./");
if(file_path.isEmpty())
{
qDebug()<<"文件路径为空";
return;
}
QFile file(file_path);
if(!file.open(QFile::ReadOnly))
{
qDebug()<<"文件打开失败";
return;
}
//增加一个一级节点以及元素
QDomDocument doc;
if(!doc.setContent(&file))
{
qDebug()<<"412行 error";
file.close() ;
return;
}
file.close();
//根节点
QDomElement root=doc.documentElement();
//获得第一个子节点
QDomNode node=root.firstChild();
while(!node.isNull())//如果节点不空
{
if(node.isElement())//如果节点是元素
{
QDomElement e=node.toElement();//转换为元素
if(!e.isNull())
{
if(e.nodeName()=="student")
{
QDomNodeList list=node.childNodes();
for(int i=0;i<list.count();i++)
{
QDomNode newNode=list.at(i);
if(newNode.isElement())
{
if("姓名"==newNode.toElement().tagName())
{
obj.insert("姓名",newNode.toElement().text());
}
if("年龄"==newNode.toElement().tagName())
{
obj.insert("年龄",newNode.toElement().text());
}
if("班级"==newNode.toElement().tagName())
{
obj.insert("班级",newNode.toElement().text());
}
}
}
array.append(obj);
}
}
node=node.nextSibling();//读取下一个兄弟节点
}
}
QString type="8";
sendJson.insert("data",array);
sendJson.insert("type",type);
jsonDoc.setObject(sendJson);
tcpSocket->write(jsonDoc.toJson());
analyseData();
}
服务端头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QTcpServer>
#include<QTcpSocket>
#include<QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
struct student
{
//int type;
int id;
char name[64];
int age;
char clss[64];
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void sendData();
//新增学生
void queryAdd(QString name,int age,QString clss);
void queryDelete(QString name);
//查询指定姓名
void querySearch(QString name);
void queryUpdate(QString name,QString rename,int age,QString clss);
//班级--学生
void showStudentTree();
//班级-老师-职称
void showClassTree();
//显示数据库全部信息
void showData();
//批量导入数据
void queryImport(QJsonObject obj);
private slots:
//发送按钮槽函数
void on_btnSend_clicked();
void on_btnClose_clicked();
private:
Ui::MainWindow *ui;
//监听套接字
QTcpServer *tcpServer;
//通信套接字
QTcpSocket *tcpSocket;
QJsonArray m_jsonArray;
QJsonObject m_jsonObject;
QJsonDocument m_jsonDocument;
QJsonObject m_obj;
};
#endif // MAINWINDOW_H
服务端.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDateTime>
#include <QMessageBox>
#include <QMessageBox>
#include <QSqlDatabase>
#include<QSqlError>
#include<QSqlQuery>
#include <QSqlRecord>
#pragma execution_character_set("utf-8")
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
tcpServer=NULL;
tcpSocket=NULL;
//监听套接字,指定父对象,让其自动回收空间
tcpServer=new QTcpServer(this);
//监听端口
tcpServer->listen(QHostAddress::Any,8888);
setWindowTitle("服务器:8888");
connect(tcpServer,&QTcpServer::newConnection,[=](){
//取出建立好连接的套接字
tcpSocket=tcpServer->nextPendingConnection();
//显示谁和客户端连接 获取客户端ip和端口
//ip
QString ip=tcpSocket->peerAddress().toString();
//port
qint16 port=tcpSocket->peerPort();
QString temp=QString("[%1:%2]:成功连接").arg(ip).arg(port);
ui->textEditRead->setText(temp);
//当前时间
QDateTime current_date_time =QDateTime::currentDateTime();
QString current_date =current_date_time.toString("yyyy-MM-dd hh:mm:ss");
//接收数据
connect(tcpSocket,&QTcpSocket::readyRead,[=]()
{
//初始化
m_obj = QJsonObject();
m_jsonObject = QJsonObject();
m_jsonArray = QJsonArray();
//从通信套接字中取出内容
QByteArray array=tcpSocket->readAll();
QJsonObject recvObj=QJsonDocument::fromJson(array).object();
//根据type 判断客户端发送的请求是什么类型
QString type=recvObj.value("type").toString();
ui->textEditRead->append(array);
if( type=="1")
{
ui->textEdit->append(current_date+" "+"获取班级-学生信息");
showStudentTree();
sendData();
}
if( type=="2")
{
ui->textEdit->append(current_date+" "+"获取班级-老师信息");
showClassTree();
sendData();
}
//获取学生数据库的全部信息
if( type=="3")
{
ui->textEdit->append(current_date+" "+"获取学生数据库信息");
showData();
sendData();
}
//增加数据
if( type=="4")
{
ui->textEdit->append(current_date+" "+"增加数据");
QString name=recvObj.value("姓名").toString();
int age=recvObj.value("年龄").toInt();
QString clss=recvObj.value("班级").toString();
queryAdd(name,age,clss);//
showData();
sendData();
}
//删除指定数据
if( type=="5")
{
ui->textEdit->append(current_date+" "+"删除数据");
QString name=recvObj.value("姓名").toString();
queryDelete(name);
showData();
sendData();
}
//查找指定数据
if(type=="6")
{
ui->textEdit->append(current_date+" "+"查找数据");
QString name=recvObj.value("姓名").toString();
querySearch(name);
//showData();
sendData();
}
//修改指定数据
if(type=="7")
{
ui->textEdit->append(current_date+" "+"修改数据");
QString rename=recvObj.value("修改姓名").toString();
QString name=recvObj.value("姓名").toString();
int age=recvObj.value("年龄").toInt();
QString clss=recvObj.value("班级").toString();
queryUpdate(name,rename,age,clss);
showData();
sendData();
}
//通过xml批量导入数据
if(type=="8")
{
ui->textEdit->append(current_date+" "+"批量导入数据");
queryImport(recvObj);
showData();
sendData();
}
});
});
//建立数据库
QSqlDatabase db= QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("Person.db");
//打开数据库
if( !db.open() ) //数据库打开失败
{
QMessageBox::warning(this, "错误", db.lastError().text());
return;
}
//操作数据库
//showStudentTree();
}
MainWindow::~MainWindow()
{
delete ui;
}
//发送数据
void MainWindow::sendData()
{
if(tcpSocket==NULL)
{
return;
}
m_jsonDocument.setObject(m_obj);
tcpSocket->write(m_jsonDocument.toJson());
}
//新增--插入新的记录
void MainWindow::queryAdd(QString name, int age, QString clss)
{
QSqlQuery query;
//查询学生数据库 全部数据
QString sql=QString("insert into student(name,age,class) values ('%1',%2,'%3') ").arg(name).arg(age).arg(clss);
query.exec(sql);
}
//删除指定信息
void MainWindow::queryDelete(QString name)
{
QSqlQuery query;
//查询学生数据库 全部数据
QString sql=QString("delete from student where name = '%1' ").arg(name);
query.exec(sql);
}
//查找指定数据
void MainWindow::querySearch(QString name)
{
QSqlQuery query;
//查询学生数据库 全部数据
QString sql=QString("select * from student where name = '%1'").arg(name);
query.exec(sql);
while(query.next())
{
//形成了一个json键值对 学生姓名:班级
//jsonObject.insert("学生编号",query.value(0).toString());
m_jsonObject.insert("姓名",query.value(1).toString());
m_jsonObject.insert("年龄",query.value(2).toString());
m_jsonObject.insert("班级",query.value(3).toString());
m_jsonArray.append(m_jsonObject);
}
// qDebug()<<m_jsonArray;
//插入数据的类型
m_obj.insert("type", "6");
m_obj.insert("data", m_jsonArray);
}
//修改数据库信息
void MainWindow::queryUpdate(QString name, QString rename, int age, QString clss)
{
QSqlQuery query;
//查询学生数据库 全部数据
QString sql=QString("update student set name='%1',age=%2,class='%3' where name='%4' ").arg(name).arg(age).arg(clss).arg(rename);
query.exec(sql);
while(query.next())
{
//形成了一个json键值对 学生姓名:班级
//jsonObject.insert("学生编号",query.value(0).toString());
m_jsonObject.insert("姓名",query.value(1).toString());
m_jsonObject.insert("年龄",query.value(2).toString());
m_jsonObject.insert("班级",query.value(3).toString());
m_jsonArray.append(m_jsonObject);
}
// QJsonObject obj;
//插入数据的类型
m_obj.insert("type", "7");
m_obj.insert("data", m_jsonArray);
}
//班级——学生 type 1
void MainWindow::showStudentTree()
{
QSqlQuery query;
//查询学生数据库
QString sql="select class,name from student group by class,name " ;
QString str;
query.exec(sql);
QSqlRecord rec = query.record();
while(query.next())
{
//形成了一个json键值对 学生姓名:班级
m_jsonObject.insert("学生姓名",query.value(1).toString());
m_jsonObject.insert("班级",query.value(0).toString());
m_jsonArray.append(m_jsonObject);
}
// QJsonObject obj;
m_obj.insert("type", "1");
m_obj.insert("data", m_jsonArray);
}
//班级——老师 type 2
void MainWindow::showClassTree()
{
QSqlQuery query;
//查询一个班对应的老师
QString sql="SELECT class.name,teacher.name,teacher.title from class,teacher,teacher_class\n"
"where teacher_id=teacher.id and class_id=class.id\n"
"ORDER BY class_id" ;
query.exec(sql);
QSqlRecord rec1 = query.record();
while(query.next())
{
m_jsonObject.insert("班级",query.value(0).toString());
m_jsonObject.insert("老师姓名",query.value(1).toString());
m_jsonObject.insert("职称",query.value(2).toString());
m_jsonArray.append(m_jsonObject);
}
m_obj.insert("type", "2");
m_obj.insert("data", m_jsonArray);
}
//显示学生数据库的全部数据 type3
void MainWindow::showData()
{
QSqlQuery query;
//查询学生数据库 全部数据
QString sql="select * from student order by class" ;
query.exec(sql);
while(query.next())
{
//形成了一个json键值对 学生姓名:班级
//jsonObject.insert("学生编号",query.value(0).toString());
m_jsonObject.insert("姓名",query.value(1).toString());
m_jsonObject.insert("年龄",query.value(2).toString());
m_jsonObject.insert("班级",query.value(3).toString());
m_jsonArray.append(m_jsonObject);
}
// QJsonObject obj;
//插入数据的类型
m_obj.insert("type", "3");
m_obj.insert("data", m_jsonArray);
}
//批量导入信息
void MainWindow::queryImport(QJsonObject obj)
{
//遍历
QSqlQuery query;
//查询学生数据库 全部数据
QJsonArray array=obj.value("data").toArray();
qDebug()<<array;
for(int i=0;i<array.size();i++){
QJsonObject json=array.at(i).toObject();
//按班级分组
QString name=json.value("姓名").toString();
QString age=json.value("年龄").toString();
QString clss=json.value("班级").toString();
qDebug()<<name<<age<<clss;
QString sql=QString("insert into student(name,age,class) values ('%1',%2,'%3') ").arg(name).arg(age).arg(clss);
query.exec(sql);
}
}
//发送按钮 槽函数
void MainWindow::on_btnSend_clicked()
{
sendData();
}
void MainWindow::on_btnClose_clicked()
{
if(tcpSocket==NULL)
{
return;
}
//主动和客户端断开连接
tcpSocket->disconnectFromHost();
tcpSocket->close();
tcpSocket=NULL;
}
写得很垃圾……,看到的人别骂