Linux 学习记录50(QT篇)
本文目录
- Linux 学习记录50(QT篇)
- 一、基于QT的TCP客户端连接
- 1. 代码实现
- 2. 自制的客户端/服务器
- 二、QT数据库SQL
- 1. QT将数据库分为三个层次
- 2. 实现数据库操作的相关方法
一、基于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();//获取IPQString 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))QSQLITESQLite 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;}