QT(9.4)tcp通信,数据库,opencv,

作业:

1.服务器

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpSocket>//客户端头文件
#include <QMessageBox>//消息对话框头文件
#include <QTcpServer>//服务器头文件
#include <list> //链表头文件,用来存放客户端容器QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
private slots:void newConnection_slot();//自定义处理newconnection信号的槽函数void readyRead_slot();//自定义处理readyRead信号的槽函数void on_startbtn_clicked();private:Ui::Widget *ui;//定义服务器指针QTcpServer *server;//定义客户端指针链表容器QList<QTcpSocket *> clientList;
};
#endif // WIDGET_H

自定义函数:

#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_startbtn_clicked()
{//获取ui界面上的端口号,用无符号的16为整型quint16 port = ui->portEdit->text().toUInt();//将服务器设置成监听状态if(!server->listen(QHostAddress::Any,port)){//启动失败消息提示框QMessageBox::critical(this,"失败","服务器启动失败");return;}else{QMessageBox::information(this,"成功","服务器启动成功");}//此时服务器已经启动成功,将服务器设置成监听状态//当有客户端发来连接请求时,服务器就会发射一个newConnection信号//将该信号连接到对应的槽函数中处理相关逻辑connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);}
//处理newConnected信号的槽函数
void Widget::newConnection_slot()
{//获取最新连接的客户端的套接字QTcpSocket *s = server->nextPendingConnection();//将获取的套接字存放到客户端容器中clientList.push_back(s);//如果该套接字有数据向服务器发送,那么套接字就会发射一个readyRead信号//我们可以将该信号连接到自定义的槽函数中connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);}
//对readyRead信号对应的槽函数
void Widget::readyRead_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++){//判断如果第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);}}}
}

客户端:

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpSocket> //客户端头文件
#include <QMessageBox>//消息对话框类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_connectBtn_clicked();void connected_slot();//自定义处理connected信号的槽函数void readyRead_slot();//自定义处理readyRead信号的槽函数void on_sendBtn_clicked();void on_disConnectBtn_clicked();void disconnected_slot();//自定义处理disconnected信号的槽函数private:Ui::Widget *ui;//定义一个客户端指针QTcpSocket *socket;QString userName; //用户名
};
#endif // WIDGET_H

自定义函数:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//给客户端指针实例化空间socket = new QTcpSocket(this);//如果连接服务器成功,该客户端就会发射一个connected的信号//我们可以将该信号连接到自定义的槽函数中处理相关逻辑//由于该连接只需连接一次,所以,写在构造函数中即可connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);//客户端与服务器连接成功后,如果服务器客户端发来数据,那么客户端就会//我们可以将该信号连接到自定义的槽函数中处理相关逻辑connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);//当客户端与服务器断开连接后,该客户端就会自动发射一个disconnected信号//我们可以将该与自定义槽函数连接//由于只需要连接一次,所以将该连接写到构造函数中connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);}Widget::~Widget()
{delete ui;
}//连接服务器按钮对应的槽函数
void Widget::on_connectBtn_clicked()
{//获取ui界面的信息userName = ui->userNameEdit->text();//获取用户名QString hostName = ui->ipEdit->text(); // 获取主机地址quint16 port = ui->portEdit->text().toUInt();//获取端口号//调用函数连接到主机//函数原型:virtual void connectToHost(const QString &hostName, quint16 port)//参数1:服务器的主机地址//参数2:端口号//返回值:无socket->connectToHost(hostName,port);//如果连接服务器成功,该客户端就会发射一个connected的信号//我们可以将该信号连接到自定义的槽函数中处理相关逻辑//由于该连接只需连接一次,所以,写在构造函数中即可}
//关于处理connected信号的槽函数的定义
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->msgList->addItem(QString::fromLocal8Bit(msg));
}
//发送按钮对应的槽函数
void Widget::on_sendBtn_clicked()
{//获取Ui界面中的编辑的文本内容QString m = ui->msgEdit->text();//整合要发送的信息QString msg = userName + ":" + m;//将消息发送给服务器socket->write(msg.toLocal8Bit());//将消息编辑框中的内容清空ui->msgEdit->clear();
}
//断开按钮对应的槽函数
void Widget::on_disConnectBtn_clicked()
{//准备要发送的信息QString msg = userName + ":离开聊天室";socket->write(msg.toLocal8Bit());//调用成员函数disconnectFromHost//函数原型://功能:断开客户端与服务器的链接//参数:无//返回值:无socket->disconnectFromHost();//当客户端与服务器断开连接后,该客户端就会自动发射一个disconnected信号//我们可以将该与自定义槽函数连接//由于只需要连接一次,所以将该连接写到构造函数中
}
//disconnected信号对应的槽函数
void Widget::disconnected_slot()
{QMessageBox::information(this,"退出","断开成功");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux修复损坏的文件系统

如何判断文件系统是否损坏 当文件系统受损时&#xff0c;将会出现一些明显的迹象。例如&#xff0c;文件或文件夹无法访问、文件大小异常、系统启动慢或无法启动等。此外&#xff0c;系统也可能发出一些错误信息&#xff0c;如"Input/output error"、"Filesyst…

Acwing算法心得——现代艺术(统计遍历)

大家好&#xff0c;我是晴天学长&#xff0c;先用两个一维数组维护数据&#xff0c;再统计遍历二维数组&#xff0c;需要的小伙伴请自取哦&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa; 1 &#xff09;现代艺术 2) .算法思路 现代艺术 1.两个数组维护行和列 2.遍历数组…

Oracle LiveLabs实验:探索 Oracle 23c 数据库的强大功能 - 架构权限和无锁预留

使用申请地址见这里。 实验帮助见这里。 7小时45分 欢迎来到 Live Labs&#xff0c;我们在这里探索并深入研究 Oracle 数据库管理的迷人领域&#xff01; 在今天的会议中&#xff0c;我们将重点讨论两个有趣的主题&#xff1a;Oracle 架构级权限和无锁列保留。 架构级别权限…

Python-函数

str1 "asdasdasd" str2 "asfgrbbtnyjyuktuyjyder" str3 "adsf3t4tykuikjdrg"def my_len(str):count 0for i in str:count 1print(count)my_len(str1) my_len(str2) my_len(str3) 函数的定义&#xff1a; def 函数名(传入参数)&#xff1a;…

偷录的录音、视频能否成为“呈堂证供”?

很多人都说偷录的录音是无效的&#xff0c;其实是对法条的不及时跟新&#xff0c;因为《最高人民法院关于未经对方当事人同意私自录音取得的资料能否作为证据使用问题的批复》&#xff08;法复〔&#xff11;&#xff19;&#xff19;&#xff15;〕&#xff12;号&#xff09;…

AI在商业领域的多重应用:优化运营与提升客户体验

在商业领域&#xff0c;人工智能&#xff08;AI&#xff09;可以用于多种方式&#xff0c;从优化运营到改进客户体验。以下是一些使用AI的商业用例以及如何在商业环境中有效地使用AI的一些建议&#xff1a; 数据分析和决策支持&#xff1a; 使用AI算法来分析大规模数据集&#…

Spring框架简介

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

简明SQL条件查询指南:掌握WHERE实现数据筛选

条件查询是用于从数据库中根据特定条件筛选数据行的一种方式&#xff0c;它避免了检索整个表中的数据。通常&#xff0c;使用 WHERE 子句来定义过滤条件&#xff0c;只有符合这些条件的数据行才会被返回。 SQL中的运算符有&#xff1a;、!、<、> 等&#xff0c;用于进行…

小程序当前页面栈以及跳转

1.调用页面栈刷新接口 let pages getCurrentPages(); //当前页面栈 if (pages.length > 1) { let beforePage pages[pages.length - 2]; //获取上一个页面实例对象 beforePage.$vm.getActivityLi…

「网页开发|前端开发|Vue」06 公共组件与嵌套路由:让每一个页面都平等地拥有导航栏

本文主要介绍在多个页面存在相同部分时&#xff0c;如何提取公共组件然后在多个页面中导入组件重复使用来减少重复代码。在这基础上介绍了通过嵌套路由的方式来避免页面较多或公共部分较多的情况下&#xff0c;避免不断手动导入公共组件的麻烦&#xff0c;并且加快页面跳转的速…

KT142C-sop16语音芯片ic的串口指令详细说明_默认9600指令可设

3.1 通讯格式 支持异步串口通讯模式,通过串口接受上位机发送的命令 通讯标准:9600 bps --- 可以发送指令修改&#xff0c;并且记忆&#xff0c;详见3.4.5 数据位 :8 停止位 :1 校验位 :none 流控制 :none 格式&#xff1a;$S VER Len CMD Feedback para1 …

PIGOSS BSM:网络大屏展现功能与特色全面解析

导语 PIGOSS BSM是一款强大的IT运维监控工具&#xff0c;提供了丰富的功能和特色。其中的“网络大屏”模块是其核心功能之一&#xff0c;能够以直观、全面的方式展示网络设备的状态信息和各种关键指标。本文将详细介绍PIGOSS BSM网络大屏的功能及特色&#xff0c;让您全面了解其…

多线程与高并发——并发编程(6)

文章目录 六、并发集合1 ConcurrentHashMap1.1 存储结构1.2 存储操作1.2.1 put方法1.2.2 putVal方法-散列算法1.2.3 putVal方法-添加数据到数组&初始化数组1.2.4 putVal方法-添加数据到链表1.3 扩容操作1.3.1 treeifyBin方法触发扩容1.3.2 tryPresize方法-针对putAll的初始…

React16、18 使用 Redux

Redux 核心 Redux 介绍 Redux 是javaScript 状态容器&#xff0c;提供可预测化的状态管理 Redux 工作流程 Actions&#xff1a;对象&#xff0c;描述对状态进行怎样的操作 Reducer&#xff1a;函数&#xff0c;操作状态并返回新的状态 Store&#xff1a;存储状态的容器&am…

设计模式的一些笔记(个人见解参杂各个模式的用途,未完待续0907)

文章目录 一、创建者模式1&#xff09;工厂模式2&#xff09;原型模式3&#xff09;建造者模式4&#xff09;单例&#xff08;单件&#xff09;模式 二、行为型模式1&#xff09;策略模式2&#xff09;观察者模式3&#xff09;命令模式4&#xff09;迭代器模式5&#xff09;状态…

Unity Asset Bundle Browser 工具

Unity Asset Bundle Browser 工具 您可以在 Unity 项目中使用 Asset Bundle Browser 工具能够查看和编辑资源包的配置。 有关更多信息&#xff0c;请参阅 Unity Asset Bundle Browser 文档。 注意&#xff1a;此工具是不受支持的实用程序。查看极大的资源包可能会导致性能下…

关于µC/OS-III 多任务的基本理解

关于C/OS-III 多任务的基本理解 任务和任务管理是 RTOS 的核心&#xff0c;且大多数项目使用 RTOS 的目的就是为了使用 RTOS 的多任务管理能力。 C/OS-III作为经典的RTOS&#xff0c;了解并学习其任务管理机制&#xff0c;是非常有必要的。 文章目录 关于C/OS-III 多任务的基本…

SQL SERVER 如何实现UNDO REDO 和PostgreSQL 有近亲关系吗

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,SQL Server&#xff0c;Redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 l…

Excel VSTO开发5 -Excel对象结构

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 5 Excel对象结构 Excel提供了几个比较重要的对象&#xff1a; Application、Workbooks、Workbook、Worksheets、Worksheet 为了便…

Mp4文件提取详细H.264和MP3文件

文章目录 Mp4文件提取为H.264和MP3文件**提取视频为H.264&#xff1a;****提取音频为MP3&#xff1a;** 点赞收藏加关注&#xff0c;追求技术不迷路&#xff01;&#xff01;&#xff01;欢迎评论区互动。 Mp4文件提取为H.264和MP3文件 要将视频分开为H.264&#xff08;视频编…