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

}

相关推荐
好吃的肘子32 分钟前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
weixin_4723394641 分钟前
MySQL MCP 使用案例
数据库·mysql
lqlj22332 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔2 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务2 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
凯雀安全3 小时前
printspoofer的RPC调用接口的简单代码
qt·网络协议·rpc
fengye2071613 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
Ailovelearning3 小时前
neo4j框架:ubuntu系统中neo4j安装与使用教程
数据库·neo4j
IP管家4 小时前
物联网设备远程管理:基于代理IP的安全固件更新通道方案
服务器·网络·物联网·网络协议·tcp/ip·安全·ip
六bring个六4 小时前
文件系统交互实现
开发语言·c++·qt·交互