Linux 学习记录50(QT篇)

Linux 学习记录50(QT篇)-LMLPHP

一、基于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>

Linux 学习记录50(QT篇)-LMLPHP

1. QT将数据库分为三个层次

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)
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;
    }
07-12 17:13