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();

}

相关推荐
Ai 编码助手2 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
Mr.Q2 小时前
Qt多边形填充/不填充绘制
qt
陈燚_重生之又为程序员3 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle3 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻3 小时前
MySQL排序查询
数据库·mysql
萧鼎3 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^3 小时前
数据库连接池的创建
java·开发语言·数据库
荒川之神3 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师3 小时前
Oracle 23AI创建示例库
数据库·oracle
可峰科技3 小时前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt