Linux 学习记录50(QT篇)

news/2024/10/18 6:08:19/

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将数据库分为三个层次

  1. 数据库驱动层:QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin
  2. sql接口层:QSqlDatabase、QSqlQuery、QSqlRecord、QSqlError
  3. 用户接口层:提供一些模型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)
8bool 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;}

http://www.ppmy.cn/news/836895.html

相关文章

设计模式——命令模式

命令模式 定义 将一个请求封装成一个对象&#xff0c;从而让你使用不同的请求吧客户端参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;可以提供命令的撤销和恢复功能。 命令模式是一个高内聚的模式。 优缺点、应用场景 优点 类间解耦。调用者与接收者之间没有任…

西门子1200四轴程序,FB284伺服v90profinet 程序西门子触摸屏程 序,新能源行业自动排列机,真实项目

西门子1200四轴程序&#xff0c;FB284伺服v90profinet 程序西门子触摸屏程 序&#xff0c;新能源行业自动排列机&#xff0c;真实项目&#xff0c;V90 走PN 口控制4轴&#xff0c;自己写的RFID读写FB SCL和西门子运动控制FB块开放&#xff0c;直接复制可用&#xff0c;没有密码…

Z世代新消费主义:如何把握体验经济的增量新机遇

点击上方蓝字关注我们 如果说被称为“The Net Generation”&#xff08;网络一代&#xff09;的“千禧一代”伴随着互联网的诞生和发展&#xff0c;那么 Z 世代早已能够自然地沐浴在移动互联网的“空气”中。如今&#xff0c;最早出生的 Z 世代已经步入社会、成为青年白领的主…

德国西门子在LED可见光通讯技术方面有了新突破

采用LED可见光作为通讯传输的技术又有了新的突破。德国西门子&#xff08;Siemens&#xff09;近日表示&#xff0c;该公司和德国Heinrich Rudolf 研究所的科学家成功合作&#xff0c;在LED可见光通讯技术上有了更新进一步的突破&#xff0c;让LED可见光通讯传输速率最高可提升…

西门子PLC200smart学习浅谈

针对于PLC200smart的学习我也写了很多文章&#xff0c;发现很多人还是遇到了大量的问题&#xff0c;所以我个人会写一些实时的文章和经验方法分享给大家&#xff0c;方法如下&#xff0c;有需要的可以关注一下。 为了能更高效的沟通我也想过使用群之类的&#xff0c;后来想了想…

强生、默沙东、西门子医疗、赛诺菲、因美纳、BioNTech等公司新动态 | 跨国药企在中国...

一周热点&#xff1a;因美纳与红杉中国在华共推基因组学孵化器。可穿戴式医疗机器人公司Myomo在中国成立合资公司。上药控股与住友制药打造处方药联合营销新模式。百奥赛图与日本LiberoThera达成合作。亚虹医药与Photocure 扩大战略合作。德国BioNTech新冠疫苗在香港获紧急使用…

西门子HMI与西门子变频器G120之间通讯功能实现方法

在实际的工程项目中&#xff0c;用户可以通过操作面板对变频器进行参数设定&#xff0c;参数修改&#xff0c;快速调试等操作。由西门子HMI与西门子变频器G120系列组成的驱动控制系统中&#xff0c;可以实现它们之间的通讯&#xff0c;使得用户可以方便了掌握西门子变频器的参数…

品质+时尚=享乐主义

在家居装饰方面&#xff0c;都市一族喜欢健康美观&#xff0c;简单时尚的风格。三层实木复合地板面板通常选用优质珍贵天然木材&#xff0c;经过径切或弦切而展现不同风格的天然木材纹理&#xff0c;具有独特的色泽、花纹&#xff0c;结构细腻&#xff0c;富于变化&#xff0c;…