Linux 学习记录50(QT篇)
本文目录
- Linux 学习记录50(QT篇)
- 一、基于QT的TCP客户端连接
- 1. 代码实现
- 2. 自制的客户端/服务器
- 二、QT数据库SQL
- 1. QT将数据库分为三个层次
- 2. 实现数据库操作的相关方法
- 思维导图
- 练习
- 1.
- 2.
- 3.
- 4.
一、基于QT的TCP客户端连接
所需头文件 <QTcpSocket>
1. 代码实现
QString ip;
quint16 port;
QString user;//用户名非必要
QTcpSocket* tcp_Client;//客户端
/***********************客户端定义***********************/
tcp_Client = new QTcpSocket(this);
/*连接服务器的信号*/
connect(tcp_Client,&QTcpSocket::connected,this,&tcp_cil::connect_slot);
/*连接服务器的接收信号*/
connect(tcp_Client,&QTcpSocket::readyRead,this,&tcp_cil::readyread_slot);
/*连接客户端的断开信号*/
connect(tcp_Client,&QTcpSocket::disconnectFromHost,this,&tcp_cil::disconect_slot);
/*断开服务器信号*/
void tcp_cil::disconect_slot(void)
{
QMessageBox::information(this,"断开","已断开服务器");
}
/*连接成功的槽函数*/
void tcp_cil::connect_slot(void)
{
QMessageBox::information(this,"成功","连接成功");
tcp_Client->write(msg.toLocal8Bit());//发送登录信息
}
/*当获取到来自服务器的消息时会由信号触发该函数*/
void tcp_cil::readyread_slot(void)
{
QString recv_str;
/*取来自服务器的数据并转换为QString格式*/
recv_str = QString::fromLocal8Bit(tcp_Client->readAll());
recv_ser->addItem(recv_str);
}
/*连接按钮 要连接服务器时触发*/
void tcp_cil::link_ser_signals(void)
{
/*获取文本*/
ip = set_ip->text();//获取IP
QString port_str = set_port->text();//获取端口
port = port_str.toUInt();//获取转换端口格式为无符号整形
user = set_user->text();//获取IP
/*将客户端连接至服务器 当成功连接服务器会发送&QTcpSocket::connected的信号到对应槽函数*/
tcp_Client->connectToHost(ip,port);
}
/*断开按钮*/
void tcp_cil::close_ser_signals(void)
{
QString msg = user + " 退出服务器";
tcp_Client->write(msg.toLocal8Bit());//向服务器发送登录消息
/*断开服务器连接*/
tcp_Client->disconnectFromHost();
}
/*发送按钮*/
void tcp_cil::send_ser_signals(void)
{
/*获取发送的文本内容*/
send_str = send_text->toPlainText();
QString msg = user + " : " +send_str;
tcp_Client->write(msg.toLocal8Bit());//发送登录信息
/*发送后清空文本*/
send_text->clear();
}
2. 自制的客户端/服务器
如有需要请到本文顶部获取,含源码
服务器在上一篇文章
客户端
服务器
二、QT数据库SQL
所需头文件:<QSqlDatabase> <QSqlQuery> <QSqlError> <QSqlRecord>
需要在obj文件添加 sql 如下
1. QT将数据库分为三个层次
- 数据库驱动层:QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin
- sql接口层:QSqlDatabase、QSqlQuery、QSqlRecord、QSqlError
- 用户接口层:提供一些模型QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel
2. 实现数据库操作的相关方法
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
1、添加数据库:[static] QSqlDatabase QSqlDatabase::addDatabase(QSqlDriver *driver, const QString &connectionName = QLatin1String(defaultConnection))
QSQLITE
SQLite version 3 or above
2、设置数据库名称:void QSqlDatabase::setDatabaseName(const QString &name)
3、包含数据库:bool QSqlDatabase::contains(const QString &connectionName = QLatin1String(defaultConnection))
4、打开数据库:bool QSqlDriver::open(const QString &db)
5、关闭数据库:void QSqlDatabase::close()
6、错误信息:QSqlError QSqlDatabase::lastError()
7、sql语句执行:构造一个QSqlQuery类对象,调用其成员函数exec,执行sql语句:bool QSqlQuery::exec(const QString &query)
8、bool QSqlQuery::next():遍历查询结果的函数
=================================================
/***********************数据库设置***********************/
/*判断数据库是否存在,如果不存在则新建*/
if(!db.contains("Registry.db"))
{//如果不存在
db = QSqlDatabase::addDatabase("QSQLITE");//使用3版本的数据库
db.setDatabaseName("Registry.db");//起名为注册表(Registry.db)
}
/*打开数据库*/
if(!db.open())
{//如果未打开成功
QMessageBox::information(this,"SQL ERROR","数据库打开失败");
}
/*当数据库打开成功,创建数据表*/
QSqlQuery querry;
/*准备sql语句 (UDI 键) (pswd) (user)*/
QString sql = "create table if not exists date(UID char primary key,pswd char,user char)";
/*执行语句*/
if(!querry.exec(sql))
{//语句执行失败
QMessageBox::information(this,"SQL ERROR","创建表失败");
}
QSqlQuery querry;
/*查找UID*/
QString sql = QString("select * from date WHERE UID = '%1'").arg(UID_line);
if(querry.exec(sql))
{
querry.next();
/*当前记录的个数*/
qDebug() << sql;
qDebug() << querry.value(0).toString();
// qDebug() << querry.value(2).toString();
// qDebug() << querry.value(3).toString();
}else
{
QMessageBox::information(this,"login ERROR",querry.lastError().text());
return;
}
思维导图
练习
1.
2.
3.
4.