QT第四讲

思维导图

基于QT的网络聊天室

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QTcpServer>          //服务器类
#include<QTcpSocket>          //客户端类
#include<QMessageBox>          //对话框类
#include<QList>                //链表容器
#include<QDebug>           //信息调试类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_startBtn_clicked();void newConnection_slot();   //服务器发出的newConnection信号对应的处理槽函数void read_slot();            //服务器将数据发送至客户端界面上的处理槽函数private:Ui::Widget *ui;//声明一个服务器指针QTcpServer *sever;//定义存储客户端容器QList<QTcpSocket*> socket_list;};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//实例化服务器指针sever = new QTcpServer(this);
}Widget::~Widget()
{delete ui;
}//启动按钮对应的槽函数
void Widget::on_startBtn_clicked()
{//获取ui界面上的端口信息qint16 port = ui->portEdit->text().toUInt();if(ui->startBtn->text() == "取消"){QMessageBox::information(this,"","即将关闭客户端");this->close();}//设置监听if(sever->listen(QHostAddress::Any,port)){ //有客户端发起连接请求QMessageBox::information(this,"","服务器已启动");ui->startBtn->setText("取消");}connect(sever,&QTcpServer::newConnection,this,&Widget::newConnection_slot);}//服务器发出的newConnection信号对应的处理槽函数
void Widget::newConnection_slot(){//获取最新连接的客户端套接字//函数原型:virtual QTcpSocket *nextPendingConnection();//功能:获取最新连接客户端的套接字//参数:无//返回值:套接字指针QTcpSocket *s = sever->nextPendingConnection();socket_list.push_back(s);   //将s存入客户端容器中//此时,客户端与服务器已经建立起来连接//如果有客户端向服务器发来数据,那么该客户端会自动发射一个readyRead信号//我们可以在该信号对应的槽函数中,读取客户端中的数据connect(s,&QTcpSocket::readyRead,this,&Widget::read_slot);
}void Widget::read_slot()
{//判断当前客户端是否在连接中for (int i = 0;i < socket_list.count();i++) {//socketList.at(i)->state();    //任意一个客户端的状态//函数原型:SocketState state() const;//功能:返回套接字的状态//参数:无//返回值:套接字状态,是个枚举值,如果为0,表示无效连接if(socket_list.at(i)->state() == 0){  //枚举值为0表示不在连接中socket_list.removeAt(i);          //从容器中删除}}//判断客户端容器中是否有待读取的数据for (int i = 0;i < socket_list.count();i++) {//判断当前套接字是否有数据待读//函数原型:qint64 bytesAvailable() const override;//功能:求出当前套接字中待读数据的个数//参数:无//返回值:待读数据的个数if(socket_list.at(i)->bytesAvailable() != 0){   //表明有数据待读取//说明当前套接字中有数据//读取当前套接字中的数据//函数原型:QByteArray readAll();//功能:读取套接字中的所有数据//参数:无//返回值:QByteArray读取下来的数据QByteArray msg = socket_list.at(i)->readAll();//将数据展示到ui界面---QString::fromLocal8Bit() <=> inet_ntoa( )ui->listWidget->addItem(QString::fromLocal8Bit(msg));//-->字节序列(采用本地的8位编码)转换为字符序列//将数据展示给用户for (int j = 0;j < socket_list.count();j++) {socket_list.at(j)->write(msg);}}}
}

main.cpp

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

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

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

相关文章

css之文字描边

文章目录 传统方式实现第二种方式 传统方式实现 html <p>文字描边效果</p>scss mixin text-stroke($color: #ffffff, $width: 1px) {text-shadow: 0 -#{$width} #{$color},#{$width} -#{$width} #{$color},#{$width} 0 #{$color},#{$width} #{$width} #{$color}…

【AI】roop给视频换脸记录

环境 安装Anaconda3基于Anaconda3创建一个python3.10的环境安装Git安装ffmpeg 我的操作系统版本是Ubuntu 18.04.4 LTS&#xff08;带GPU会快一点&#xff09;&#xff0c;以上所说的 环境请自行百度安装&#xff01;快速使用 拉取项目 git clone gitgithub.com:VoidAndNull…

Spring Cache

什么是Spring Cache&#xff1f; Spring Cache是Spring框架的一个模块&#xff0c;它提供了对应用程序方法级别的缓存支持。通过使用Spring Cache&#xff0c;您可以在方法的结果被计算后&#xff0c;将其缓存起来&#xff0c;从而避免相同输入导致的重复计算。 Spring Cache…

AWS考试认证学习(二)

一、AWS高级 SAP-C01考试 AWS高级考试 AWS Certified Solutions Architect - Professional 报名费&#xff1a;300美金 SAP-C01考试内容主要覆盖的五大领域和对应领域所占权重&#xff1a; 1、组织复杂性设计 12.5% 2、新解决方案设计 31% 3、迁移规划 15% 4、成本控制…

Linux 发行版 CentOS 于 Ubuntu 软件的安装、卸载、查找

CentOS于Ubuntu 内核都是Linux&#xff0c;是一样的。 CentOS 软件格式 .rpm sudo yum [-y] [ install | remove | search ] 软件名称 install 安装 remove 移除 search 搜索 Ubuntu 软件格式 .deb sudo apt [-y] [ install | remove | search ] 软件名称 install 安装 remove…

二叉树的层序遍历(两种方法:迭代+递归)

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 解题思路&#xff1a;迭代法…

Vector<T> 动态数组(随机访问迭代器)(答案)

答案如下 //------下面的代码是用来测试你的代码有没有问题的辅助代码,你无需关注------ #include <algorithm> #include <cstdlib> #include <iostream> #include <vector> #include <utility> using namespace std; struct Record { Record…

第一财经专访张晨:图技术赋能金融领域进入全新阶段

2023世界人工智能大会期间&#xff0c;创邻科技创始人兼CEO张晨博士受邀走进第一财经的演播室&#xff0c;围绕人工智能技术和图技术在金融行业的赋能展开讨论&#xff0c;为线上数万名观众分享精彩前沿观点。 现场直击 AI赋能金融 大模型催生新业态 | 图技术赋能金融领域进入…

string类的模拟实现

文章目录 string类的模拟实现string基本框架的实现operator的实现string常用函数的实现 string类的模拟实现 前文对于string的常用函数做了讲解&#xff0c;由于string是一个面试官常考的点&#xff0c;总喜欢让模拟实现string类&#xff0c;下面来模拟实现一下string&#xf…

优化企业集成架构:iPaaS集成平台助力数字化转型

前言 在数字化时代全面来临之际&#xff0c;企业正面临着前所未有的挑战与机遇。技术的迅猛发展与数字化转型正在彻底颠覆各行各业的格局&#xff0c;不断推动着企业迈向新的前程。然而&#xff0c;这一数字化时代亦衍生出一系列复杂而深奥的难题&#xff1a;各异系统之间数据…

Vite创建Vue+TS项目引入文件路径报错

使用vite搭建vue3脚手架的时候&#xff0c;发现main.ts中引入App.vue编辑器会报错&#xff0c;但是不影响代码运行。 报错信息&#xff1a;TS2307: Cannot find module ‘./App.vue’ or its corresponding type declarations. 翻译过来是找不到模块或者相关的声明类型&#…

如何快速模拟一个后端 API

第一步&#xff1a;创建一个文件夹&#xff0c;用来存储你的数据 数据&#xff1a; {"todos": [{ "id": 1, "text": "学习html44", "done": false },{ "id": 2, "text": "学习css", "…

Redis7学习笔记01

一、redis7实战教程简洁 1、大纲&#xff1a; ①、适合对象&#xff0c;从小白到熟手&#xff0c;一套全包圆 ②、Redis专题-大厂面试题&#xff0c;含100道 ③、Redis专题-真实需求生产真实案例 ④、Redis7新特性 2、小白篇高阶篇&#xff1a; 3、大厂面试题&#xff1a…

自动化测试——APP测试

一、环境配置 1、安装jdk 配置环境变量 2、Android SDK 环境安装 3、Appium Server安装 4、模拟器安装 5、安装appium-python-client Python第三方库 二、APP自动化测试原理 三、Desired Capabilites——APPium自动化配置项 1、设置参数 2、操作系统 3、选择版本 4、设备名称…

唯一索引异常捕获aop切面工具类

定义自定义唯一索引捕获注解 /*** author huaqiang* version 1.0* description 自定义唯一索引异常* date 2023/7/28*/ Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) public interface CustomDuplicateKeyException {String[] keyValu…

TCP KeepAlive与HTTP Keep-Alive

TCP KeepAlive与HTTP Keep-Alive TCP KeepAliveHTTP Keep-AliveTCP服务器怎么检测客户端断开连接 TCP KeepAlive TCP连接建立之后&#xff0c;如果应用程序或者上层协议一直不发送数据&#xff0c;或者隔很长时间才发送一次数据&#xff0c;那么TCP需要判断是应用程序掉线了还…

在CSDN学Golang云原生(Kubernetes Pod)

一&#xff0c;pod的定义与基本用法 在 Kubernetes 中&#xff0c;Pod 是最小的可部署单元&#xff0c;它包含一个或多个容器。使用 Golang 来定义和操作 Pod 时&#xff0c;需要使用 kubernetes/client-go 包提供的 API。 以下是 Golang 定义和基本用法 Pod 的示例&#xff…

【Java】Spring框架是如何解决Bean创建过程中的循环依赖问题的

文章目录 【Java】Spring框架是如何解决Bean创建过程中的循环依赖问题的引言三级缓存数据结构简介源码阅读如何启动调试&#xff1f;场景1&#xff1a;通过xml配置文件来构造循环引用场景2&#xff1a;通过注解自动装配属性来构造循环引用&#xff1a;以Controller为例 脉络场景…

jdk8使用okhttp发送http2请求

本文主要用于工作记录&#xff0c;在项目中遇到了就记录一下 在早期&#xff0c;原生的JDK8是不支持HTTP/2协议的&#xff0c;所以&#xff0c;要想使用这个特性&#xff0c;需要有web服务器和应用环境的支持&#xff0c; 例如&#xff1a;在VM中增加-Xbootclasspath/p:/Users…

Android Studio 启用设备远程调试配置完整步聚

启用手机设置->开发者选项-无线调试,然后选择允许 已启用后无线调试变成绿色 ,点击无线调试进入详情页面 点击Android Studio的Device Manager 下的WIFI图标 会弹出下图窗口 打开手机的开发者选项中的WIFI调试(无线调试)下的使用二维码配对设备进行扫描. 设备配对成功后手机…