Qt编程,TCP编程、数据库

目录

[1、TCP: QTcpServer | QTcpSocket](#1、TCP: QTcpServer | QTcpSocket)

1、 ##TCP客户端

1、//连接成功信号

2、//连接断连信号

[3、 //数据就绪信号](#3、 //数据就绪信号)

[4、 //连接到服务器,使用服务器的IP地址和端口](#4、 //连接到服务器,使用服务器的IP地址和端口)

5、//发送数据到服务器

6、//从服务器接收数据

2、##TCP服务器端

1、//创建TCP服务器对象

2、//新连接信号

3、//断连的信号

[4、 //接收数据就绪信号](#4、 //接收数据就绪信号)

5、//发送数据到客户端

[2、SQLITE 数据库编程](#2、SQLITE 数据库编程)

1、//创建表

2、//数据插入方式1

[3、 //查询数据](#3、 //查询数据)

[4、 //修改数据](#4、 //修改数据)

5、//删除数据

1、TCP: QTcpServer | QTcpSocket

1、 ##TCP客户端

socket = new QTcpSocket(this);

1、//连接成功信号

connect(socket, &QTcpSocket::connected, [=](){

ui->pb_connect->setText("断开连接");

ui->pb_send->setEnabled(true);

});

2、//连接断连信号

connect(socket, &QTcpSocket::disconnected, [=](){

ui->pb_connect->setText("连接");

ui->pb_send->setEnabled(false);

});

3、 //数据就绪信号

connect(socket, &QTcpSocket::readyRead, [=](){

QByteArray data = socket->readAll();

//QString tmp = ui->te_receive->toPlainText();

ui->te_receive->append(QString::fromLocal8Bit(data));

});

4、 //连接到服务器,使用服务器的IP地址和端口

socket->connectToHost(QHostAddress(ip), port.toUShort());

5、//发送数据到服务器

if (socket->write(ui->te_send->toPlainText().toLocal8Bit()) == -1) //使用toLocal8Bit可以支持中文

{

qDebug() << "客户端发送数据失败";

}

else

{

qDebug() << "客户端发送数据成功";

}

6、//从服务器接收数据

QByteArray data = socket->readAll();

ui->te_receive->append(QString::fromLocal8Bit(data)); //使用fromLocal8Bit可以支持中文

2、##TCP服务器端

1、//创建TCP服务器对象

server = new QTcpServer(this);

//设置监听的IP地址和端口

server->listen(QHostAddress::AnyIPv4, 8888);

2、//新连接信号

connect(server, &QTcpServer::newConnection, [=](){

if (server->hasPendingConnections())//如果有待处理的新连接

{

socket = server->nextPendingConnection();//处理新连接, 获得通信套接字,以后双方的通信基于此套接字,每个新连接会产生一个新的通信套接字

}

3、//断连的信号

connect(socket, &QTcpSocket::disconnected, [=](){

ui->pb_send->setEnabled(false);

});

4、 //接收数据就绪信号

connect(socket, &QTcpSocket::readyRead, [=](){

//读取接收到的数据

QByteArray data = socket->readAll();

ui->te_receive->append(QString::fromLocal8Bit(data));

});

});

5、//发送数据到客户端

if (socket->write(ui->te_send->toPlainText().toLocal8Bit()) == -1)

{

qDebug() << "服务器发送数据失败";

}

else

{

qDebug() << "服务器发送数据成功";

}

2、SQLITE 数据库编程

qmake: QT += sql

使用到的类:

QSqlDatabase //数据库连接

QSqlQuery //数据SQL语句执行

//创建SQLITE数据库连接

QSqlDatabase db_student = QSqlDatabase::addDatabase("QSQLITE");//使用SQLITE数据库

//设置数据库的文件名

db_student.setDatabaseName(db_file_name);

//打开数据库

if (!db_student.open())

{

qDebug() << "打开数据库失败1";

}

//关闭数据库

db_student.close();

//使用当前的数据库连接 执行SQL操作

QSqlQuery query(db_student);

1、//创建表

QString queryStr = "create table Student (id varchar(64) PRIMARY KEY, name varchar(64), gender varchar(64), age int)";

if (!query.exec(queryStr))

{

qDebug() << "创建数据库表失败";

qDebug() << query.lastError().text();

}

2、//数据插入方式1

queryStr = "insert into Student values('2309250001', '张三', '男', 13)";

if (!query.exec(queryStr))

{

qDebug() << "插入数据失败";

qDebug() << query.lastError().text();

}

//数据插入方式2

queryStr = "insert into Student values(?,?,?,?)";

query.prepare(queryStr);

query.addBindValue("2309250002");

query.addBindValue("李四");

query.addBindValue("男");

query.addBindValue(12);

if (!query.exec())

{

qDebug() << "插入数据失败2";

qDebug() << query.lastError().text();

}

//数据插入方式3

QString queryStr = "insert into Student values(:id,:name,:gender,:age)";

query.prepare(queryStr);

query.bindValue(":id", ui->le_id->text());

query.bindValue(":name", ui->le_name->text());

query.bindValue(":gender", ui->cbb_gender->currentText());

query.bindValue(":age", ui->le_age->text().toInt());

if (!query.exec())

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

3、 //查询数据

QString queryStr = "select * from Student";

if (!query.exec(queryStr))

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

QString queryStr = "select * from Student where id = :id";

query.prepare(queryStr);

query.bindValue(":id", ui->le_id->text());

if (!query.exec())

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

while (query.next())

{

ui->le_name->setText(query.value(1).toString());

ui->cbb_gender->setCurrentText(query.value(2).toString());

ui->le_age->setText(query.value(3).toString());

}

4、 //修改数据

QString queryStr = "update Student set name=?, gender=?,age=? where id=?";

query.prepare(queryStr);

query.addBindValue(ui->le_name->text());

query.addBindValue(ui->cbb_gender->currentText());

query.addBindValue(ui->le_age->text());

query.addBindValue(ui->le_id->text());

if (!query.exec())

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

5、//删除数据

QString queryStr = "delete from Student where id = :id";

query.prepare(queryStr);

query.bindValue(":id", ui->le_id->text());

if (!query.exec())

{

qDebug() << "execute " << queryStr << " failed";

qDebug() << query.lastError().text();

}

相关推荐
gma99936 分钟前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️38 分钟前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98761 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
苏-言1 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
Ljw...2 小时前
索引(MySQL)
数据库·mysql·索引
菠萝咕噜肉i2 小时前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
长风清留扬2 小时前
一篇文章了解何为 “大数据治理“ 理论与实践
大数据·数据库·面试·数据治理
OpsEye2 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级
Ljw...2 小时前
表的增删改查(MySQL)
数据库·后端·mysql·表的增删查改