qt连接tcp通信和连接数据库

这篇具有很好参考价值的文章主要介绍了qt连接tcp通信和连接数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通过数据库实现学生管理系统

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //判断数据库对象是否包含了自己使用的数据库  Studemt.db
    if(!db.contains("Student.db"))
    {
        //添加一个数据库
        db = QSqlDatabase::addDatabase("QSQLITE");                   //表示使用的是sqlite3版本的数据库

        //给数据库命名
        db.setDatabaseName("Student.db");
    }

    //打开数据库
    if(!db.open())
    {
        QMessageBox::information(this,"提示","数据库打开失败");
        return;
    }

    //此时说明数据库创建完毕并打开
    //就可以创建数据表了
    //需要使用SQL语句,需要使用QSQLQuerry类对象完成
    //准备SQL语句
    QString sql = "create table if not exists myTable("              //创建表的sql语句
                    "id integer primary key autoincrement,"          //id主键,允许自增
                    "numb integer,"                                  //学号,是整形
                    "name varchar(10),"                              //姓名   字符串
                    "score integer,"
                    "sex varchar(4))";                                //性别 字符串

    //定义语句执行者
    QSqlQuery querry;

    //使用queery执行SQL语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失败","创建表失败");
    }else
    {
        QMessageBox::information(this,"成功","创建表成功");
    }
}


Widget::~Widget()
{
    delete ui;
}

//录入按钮对应的槽函数
void Widget::on_btn1_clicked()
{
    //获取ui界面中要存入数据库中的数据
    int numb_ui = ui->edit1->text().toInt();            //获取学号
    QString name_ui = ui->edit2->text();                //获取姓名
    int score_ui = ui->edit3->text().toInt();           //获取分数
    QString sex_ui = ui->edit4->text();                 //获取性别

    if(numb_ui == 0 || name_ui.isEmpty() || score_ui == 0||sex_ui.isEmpty())
    {
        QMessageBox::information(this,"提示","请将信息填充完整");
        return ;
    }

    //准备SQL语句
    QString sql = QString("insert into myTable(numb,name,score,sex)"
                  "values(%1,'%2',%3,'%4')")
            .arg(numb_ui).arg(name_ui).arg(score_ui).arg(sex_ui);

    //定义语句执行官
    QSqlQuery querry;

    //调用执行者的相关函数执行SQL语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失败","插入失败");
    }else
    {
        QMessageBox::information(this,"成功","插入成功");
    }
}

//展示按钮对应的槽函数
void Widget::on_btn2_clicked()
{
    //准备SQL语句
    QString sql = "select * from myTable";

    //准备语句执行者
    QSqlQuery querry;
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失败","查找失败");
        return;
    }

    //此时将查找的所有结果全都都放在querry对象中
    //可以通过next函数不断遍历查询结果
    int i = 0;                           //记录行号
    while(querry.next())
    {
        //遍历任意一组记录,querry.record
           //querry.record();

        //要找到每条一条记录 中的每个数据使用
           //qDebug() << querry.record().value(2);

        //返回当前记录对应数据项的个数
           //querry.record().count();

        //将记录的某一项的数据转变成了字符串
           //querry.record().value(2).toString();

        //将数据库中的表格展示到ui界面
           //ui->tableWidget->setItem();

        for(int j = 0; j<querry.record().count()-1; j++)
        {
            ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
        }
        i++;                             //进行下一行
    }
}

//查找按钮
void Widget::on_btn3_clicked()
{
    //获取ui界面中要存入数据库中的数据
    int numb_ui = ui->edit1->text().toInt();            //获取学号
    QString name_ui = ui->edit2->text();                //获取姓名
    int score_ui = ui->edit3->text().toInt();           //获取分数
    QString sex_ui = ui->edit4->text();                 //获取性别

    if(numb_ui != 0)
    {
        ui->tableWidget->clear();
        //准备SQL语句
        QString sql = QString("select * from myTable where %1 == numb").arg(numb_ui);

        //准备语句执行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","查找失败");
            return;
        }

        int i = 0;                           //记录行号
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //进行下一行
        }

    }else if(!name_ui.isEmpty())
    {
        ui->tableWidget->clear();
        //准备SQL语句
        QString sql = QString("select * from myTable where '%2' == name").arg(name_ui);

        //准备语句执行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","查找失败");
            return;
        }

        int i = 0;                           //记录行号
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //进行下一行
        }

    }else if(score_ui != 0)
    {
        ui->tableWidget->clear();
        //准备SQL语句
        QString sql = QString("select * from myTable where %3 == score").arg(score_ui);

        //准备语句执行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","查找失败");
            return;
        }

        int i = 0;                           //记录行号
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //进行下一行
        }
    }else if(!sex_ui.isEmpty())
    {
        ui->tableWidget->clear();
        //准备SQL语句
        QString sql = QString("select * from myTable where '%4' == sex").arg(sex_ui);

        //准备语句执行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","查找失败");
            return;
        }

        int i = 0;                           //记录行号
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //进行下一行
        }
    }
}

//删除按钮
void Widget::on_btn4_clicked()
{
    //获取ui界面中要存入数据库中的数据
    int numb_ui = ui->edit1->text().toInt();            //获取学号
    QString name_ui = ui->edit2->text();                //获取姓名
    int score_ui = ui->edit3->text().toInt();           //获取分数
    QString sex_ui = ui->edit4->text();                 //获取性别

    if(numb_ui != 0 )
    {
        ui->tableWidget->clear();
        //准备SQL语句
        QString sql = QString("delete from myTable where %1 == numb").arg(numb_ui);

        //准备语句执行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","删除失败");
            return;
        }
        else
        {
             QMessageBox::information(this,"成功","删除成功");
        }

        //准备SQL语句
        QString sql1 = "select * from myTable";
        querry.exec(sql1);
        int i = 0;                           //记录行号
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //进行下一行
        }
    }else if(!name_ui.isEmpty())
    {
        ui->tableWidget->clear();
        //准备SQL语句
        QString sql = QString("delete from myTable where '%2' == name").arg(name_ui);

        //准备语句执行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","删除失败");
            return;
        }
        else
        {
             QMessageBox::information(this,"成功","删除成功");
        }

        int i = 0;                           //记录行号
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //进行下一行
        }

    }else if(score_ui != 0)
    {
        ui->tableWidget->clear();
        //准备SQL语句
        QString sql = QString("delete from myTable where %3 == score").arg(score_ui);

        //准备语句执行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","删除失败");
            return;
        }
        else
        {
             QMessageBox::information(this,"成功","删除成功");
        }
        int i = 0;                           //记录行号
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //进行下一行
        }
    }else if(!sex_ui.isEmpty())
    {
        ui->tableWidget->clear();
        //准备SQL语句
        QString sql = QString("delete from myTable where '%4' == sex").arg(sex_ui);

        //准备语句执行者
        QSqlQuery querry;
        if(!querry.exec(sql))
        {
            QMessageBox::information(this,"失败","删除失败");
            return;
        }
        else
        {
             QMessageBox::information(this,"成功","删除成功");
        }

        int i = 0;                           //记录行号
        while(querry.next())
        {
            for(int j = 0; j<querry.record().count()-1; j++)
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem(querry.record().value(j+1).toString()));
            }
            i++;                             //进行下一行
        }
    }

}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QSqlDatabase>                         //数据库管理类
#include<QSqlQuery>                            //执行SQL语句对应的类
#include<QSqlRecord>                           //记录类
#include<QMessageBox>
#include<QDebug>



QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_btn1_clicked();

    void on_btn2_clicked();

    void on_btn3_clicked();

    void on_btn4_clicked();

private:
    Ui::Widget *ui;

    //定义一个数据库对象
    QSqlDatabase db;
};
#endif // WIDGET_H

 qt连接tcp通信和连接数据库,qt,数据库,开发语言

qt连接tcp通信和连接数据库,qt,数据库,开发语言

qt连接tcp通信和连接数据库,qt,数据库,开发语言

 tcp服务器

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //给服务器指针实例化对象
    server = new QTcpServer(this);
}

Widget::~Widget()
{
    delete ui;
}

//启动服务器按钮对应的槽函数
void Widget::on_btn_clicked()
{

    //获取ui界面上的端口号
    quint16 port = ui->edit->text().toUInt();


    if(!server->listen(QHostAddress::Any,port))
    {
        QMessageBox::critical(this,"失败","服务器启动失败");
        return;
    }else
    {
        QMessageBox::information(this,"成功","服务器启动成功");
    }
    connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}

//处理的newConnection信号的槽函数的实现
void Widget::newConnection_slot()
{
    qDebug() << "有新的客户端发来连接请求";
    QTcpSocket *s = server->nextPendingConnection();
    //将获取的套接字存放到客户端容器中
    clientList.push_back(s);
    connect(s,&QTcpSocket::readyRead,this,&Widget::redyRead_slot);
}

//关于readyRead信号的槽函数
void Widget::redyRead_slot()
{
    //删除客户端链表中的无效客户端套接字
    for(int i=0;i<clientList.count();i++)
    {
        if(clientList[i]->state() == 0)
        {
            clientList.removeAt(i);               // 将下标为i的客户端移除掉
        }
    }

    //遍历所有客户端,查看是哪个客户端发来数据
    for(int i=0;i<clientList.count();i++)
    {

        if(clientList[i]->bytesAvailable() != 0)
        {
            QByteArray msg = clientList[i]->readAll();
            //将数据展示到ui界面上
            ui->msglist->addItem(QString::fromLocal8Bit(msg));
            //接接受的消息发送到所有客户端,发送给所有客户端
            for(int j=0;j<clientList.count();j++)
            {
                clientList[j]->write(msg);
            }
        }
    }
}

tcp客户端

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //客户端指针实例化空间
    socket = new QTcpSocket(this);

    connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);

    connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);

    connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);
}

Widget::~Widget()
{
    delete ui;
}

//连接服务器按钮对应的槽函数
void Widget::on_btn2_clicked()
{
    //获取ui界面的信息
    userName = ui->edit2->text();                       //获取用户名
    QString hostName = ui->edit3->text();               //获取主机地址
    quint16 port= ui->edit4->text().toUInt();           //获取端口号

    socket->connectToHost(hostName,port);

}


void Widget::connected_slot()
{
    QMessageBox::information(this,"成功","连接服务器成功");

    //顺便向服务器发送一条信息
    QString msg = userName + ":进入聊天室";

    socket->write(msg.toLocal8Bit());
}

//关于readyRead信号的槽函数
void Widget::readyRead_slot()
{
    //读取该客户端中的数据
    QByteArray msg = socket->readAll();

    //将数据展示在ui界面
    ui->listWidget->addItem(QString::fromLocal8Bit(msg));
}

//发送消息
void Widget::on_btn1_clicked()
{
    //获取ui界面中编辑文本的内容
    QString m = ui->edit1->text();

    //整合要发送的信息
    QString msg = userName + ":" + m;

    //将消息发送给服务器
    socket->write(msg.toLocal8Bit());

    //将消息编辑框中的内容清空
    ui->edit1->clear();
}

//断开服务器
void Widget::on_btn3_clicked()
{
    //准备要发送的信息
    QString msg = userName + ":离开聊天室";
    socket->write(msg.toLocal8Bit());


    socket->disconnectFromHost();

}


void Widget::disconnected_slot()
{
    QMessageBox::information(this,"退出","退出成功");
}

qt连接tcp通信和连接数据库,qt,数据库,开发语言文章来源地址https://www.toymoban.com/news/detail-694605.html

到了这里,关于qt连接tcp通信和连接数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT连接Mysql数据库(详细成功版)

    QT连接Mysql数据库步骤相对比较麻烦,因此写了篇文章将详细过程呈现给大家,欢迎大家来评论区指导提问。 示例代码: (1)在.pro文件中添加下列代码: (2)在mainwindow.h文件中添加下列头文件:  (3)在main.cpp文件中添加下列代码: 运行代码,如果连接Mysql成功则输出下面

    2024年01月16日
    浏览(56)
  • Windows Qt连接达梦数据库

            首先可以在达梦数据库的官网下载达梦数据库:https://www.dameng.com/list_103.html           如果你的QT程序是64位的,那么就下载win64 的达梦数据库,相应的32位的QT程序要下载win32的达梦数据库。否则,程序在连接数据库时,会报 “驱动程序和应用程序之间的体系

    2023年04月22日
    浏览(46)
  • 使用QT连接access数据库详解(清晰、透彻)

    第一步、查看我们自己电脑上access数据库驱动是32位的还是64位的,查看方法:通过odbc数据源管理器进行查看,odbc数据源管理器分为32位和64位: 32位odbc数据源管理器查看如下:注意是syswow64文件夹中  下面图片证明:access数据库驱动是32位的:  我们也可以打开64位的odbc数据

    2024年02月06日
    浏览(90)
  • Qt连接MySQL数据库最详细的教程

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 原文链接:https://blog.csdn.net/joey_ro/article/details/105411135 被Qt连接数据库折磨了三天之后终于连接成功了,记录一下希望对看到的人有所帮助。 当然要在.pro文件中添加一行引入 如果显示: 那么恭喜你太幸

    2024年01月21日
    浏览(49)
  • QT实现连接MySQL数据库以及查询等操作

    功能包含数据库的增删改查和界面的显示,因为没有用.ui文件所以控件的位置都是手动设置的,写的有点费劲 首先打开Navicat,新建一个名字为bak_db的数据库,然后新建查询导入下面的sql语句: 然后刷新显示表已经创建好了,接下来就开始进行操作了: 文件结构 源码在我的

    2024年02月04日
    浏览(66)
  • Qt连接MySQL数据库(保姆级成功版教程)

    VIP通道可以关注我,私信我,直接给两个动态库,直接起飞。 1、安装Qt时勾选sources 2、配置path环境变量 ① 此电脑-属性-高级系统设置-环境变量 ② 双击path-右上角新建 ③把这两个路径添加进去,最后确定 3、编译mysql驱动(在Qt打开mysql.pro文件) 1)在这条路径中D:QT5.14.25.1

    2024年02月04日
    浏览(45)
  • QT mysql 驱动-数据库安装以及qt连接ssl报错问题

    文章末尾是引用笔记 配置MySQL8.0 环境变量 如果不配置MySQL环境变量,就不能在命令行直接输入MySQL登录命令。下面说如何配置MySQL的环境变量: 步骤1:在桌面上右击【此电脑】图标,在弹出的快捷菜单中选择【属性】菜单命令。 步骤2:打开【系统】窗口,单击【高级系统设

    2024年01月20日
    浏览(56)
  • 如何实现无公网ip固定TCP端口地址远程连接Oracle数据库

    Oracle,是甲骨文公司的一款关系数据库管理系统,它在数据库领域一直处于领先地位。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据

    2024年01月18日
    浏览(54)
  • QT连接MySql数据库失败,编译驱动问题,最详细解决办法

    各位读者你们好🔥 此篇是本专栏的第一篇,本专栏专门收录在学习过程中遇到的环境配置、软件问题等开发环境方面的问题。🚀🚀🚀 刚刚转阴就迫不及待的赶紧写一篇博客来解决一直落下的一个问题: 关于QT和MySql数据库的连接问题😷(在本人经过整整三天的无限踩坑之

    2024年02月05日
    浏览(56)
  • openGauss学习笔记-100 openGauss 数据库管理-管理数据库安全-客户端接入之用SSL进行安全的TCP/IP连接

    100.1 背景信息 openGauss支持SSL标准协议(TLS 1.2),SSL协议是安全性更高的协议标准,它们加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。 100.2 前提条件 从CA认证中心申请到正式的服务器、客户端的证书和密钥。(假设

    2024年02月05日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包