QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)

 QT实现tcpf服务器代码:(源文件)

#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界面上的端口quint16 port = ui->portEdit->text().toInt();//将服务器设置成监听状态if(server->listen(QHostAddress::Any,port)){QMessageBox::information(this,"","服务器启动成功");}else{QMessageBox::information(this,"","服务器启动失败");}//此时服务器已经进入监听状态,如果有客户端发来连接请求,那么该服务器就会自动发射一个newConnection信号//我们可以将该信号连接到自定义的槽函数中处理新连接的套接字connect(server,&QTcpServer::newConnection,this,&Widget::newConnection_slot);
}void Widget::newConnection_slot()
{qDebug()<<"有新客户连接";//获取最新连接的客户端套接字QTcpSocket *s=server->nextPendingConnection();//将该套接字放入到客户端容器中socketlist.push_back(s);//此时,客户端与服务器已经建立起来连接//如果有客户端向服务器发来数据,那么该客户端会自动发射一个readyRead信号//我们可以在该信号对应的槽函数中,读取客户端中的数据connect(s,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);
}
void Widget::readyRead_slot()
{//移除无效客户端for(int i=0;i<socketlist.count();i++){if(socketlist.at(i)->state()==0){socketlist.removeAt(i);}}//遍历客户端套接字,寻找是哪个客户端有数据待读for(int i=0;i<socketlist.count();i++){//判断当前套接字是否有数据待读if(socketlist.at(i)->bytesAvailable()!=0){//读取套接字中的所有数据QByteArray msg = socketlist.at(i)->readAll();//将数据展示到ui界面ui->listWidget->addItem(QString::fromLocal8Bit(msg));//将数据发送给所有客户端for(int j=0;j<socketlist.count();j++){//将数据写入到所有客户端套接字中socketlist.at(j)->write(msg);}}}
}

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMessageBox>
#include <QDebug>
#include <QList>
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();void readyRead_slot();private:Ui::Widget *ui;QTcpServer *server;QList<QTcpSocket *> socketlist;
};
#endif // WIDGET_H

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

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

相关文章

excel中使地址按十六进制进行数值递增的函数

这里是尼德兰的喵工具相关文章&#xff0c;欢迎您的访问&#xff01; 如果文章对您有所帮助&#xff0c;期待您的点赞收藏&#xff01; 让我们一起为成为芯片前端全栈工程师而努力&#xff01; 在进行寄存器编写时很多时候会涉及到算地址的问题&#xff0c;通常32bit位宽的寄存…

棕榈酰三肽-38——对额间纹,鱼尾纹,抬头纹和颈纹非常有效

简介 棕榈酰三肽-38由三个氨基酸组成&#xff0c;是一种双氧化的脂肽。这种肽的灵感源自于天然存在于胶原蛋白VI和层粘连蛋白中的一种三肽。 它可以在需要的地方&#xff0c;从内部重建肌肤&#xff0c;使皱纹平滑皮肤得到舒缓&#xff0c;尤其对额间纹&#xff0c;鱼尾纹&…

电教智能云数据可视化平台开发电脑优化日志实录

电教智能云数据可视化平台开发电脑优化日志实录 一、2K和4K弹窗判断二、电能API对接1.电脑爬虫2.电能分组过滤3.数据可视化渲染4.弹窗 三.数组按顺序输出 一、2K和4K弹窗判断 {* 判断2k和4k弹窗 *}{if $dataScene[scene_standard] eq 0}<a class"menuBtn subMenu"…

Spring整合Mybatis、Spring整合JUnit

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Spring整合 一、Spring整合Mybatis1.1 整合Mybatis&#x…

python设计模式

16种设计模式 1.简单工厂模式 内容:不直接向客户端暴露对象创建的实现细节,而是通过一个工厂来负责创建产品类的实例 角色: 工厂角色(Creator) 抽象产品角色(Product) 具体产品角色(Concrete Product) 优点: 1.隐藏了对象创建的实现细节 2.客户端不需要修改代码 缺点: 1.违…

记录一次通过iostat命令定位系统数据库CPU飙升的案例

一、背景 我们有个移动考勤的系统&#xff0c;运维监控系统显示&#xff0c;每到上下班时间&#xff0c;考勤数据库的CPU就飙升到100%&#xff0c;磁盘读写请求等待时间变长&#xff0c;最初无法确定是磁盘性能下降导致的CPU飙升&#xff0c;还是CPU飙升导致的磁盘性能下降&…

C# 外观模式

概述 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性&#xff0c;使得客户端可以通过简单的接口与子系统进行交互。 外观模式定义了一个高层…

设计模式之观察者模式

定义&#xff1a;对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发货所能改变时&#xff0c;所有依赖它的对象都得到通知并被自动更新。 例子&#xff1a;报纸-邮局-用户 不用设计模式实现 被观察者 package com.tao.YanMoDesignPattern.observer.case3_Origin;…

计算语言模型计算每秒钟生成的token数量it/s

在 main() 函数的stream循环中&#xff0c;我们可以计算每秒钟生成的token数量&#xff0c;然后输出 it/s。在流式生成过程中&#xff0c;我们可以使用Python的time模块来计算速度。在测试时&#xff0c;生成速度会受到多个因素的影响&#xff0c;包括设备性能、模型大小、输入…

Docker快速入门笔记

Docker快速入门 前言 当今软件开发领域的一股热潮正在迅速兴起&#xff0c;它融合了便捷性、灵活性和可移植性&#xff0c;让开发者们欣喜若狂。它就是 Docker&#xff01;无论你是一个初学者&#xff0c;还是一位经验丰富的开发者&#xff0c;都不能错过这个引领技术浪潮的工…

基本不等式@平均值不等式@双勾函数不等式

文章目录 基本不等式基本齐次不等式一次形式&#x1f47a;基本不等式拓展拓展1拓展2 算数平均数和几何平均数不等式应用恒等变形 双勾函数不等式导数函数单调性&#x1f388;求解过程 极值点和极值函数单调性的简单证明&#x1f388; 基本不等式 基本齐次不等式 设 a , b ∈ …

windwos server 2008 更新环境,且vs_redis 安装失败

KB2919442 下载地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id42153 KB2919355 下载地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id42153 安装步骤:先安装442,后安装355

C语言打印水仙花数

“水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和确好等于该数本身&#xff0c;如:153&#xff1d;13&#xff0b;53&#xff0b;3^3&#xff0c;则153是一个“水仙花数”。 思路&#xff0c;先把每个数的每位算出来&#xff0c;然后再判断他们的3次方相加是否这个…

Ansible中常用的模块结合案例使用详解

Ansible中常用的模块结合案例使用详解 1. file模块2. copy模块3. yum_repository模块4. yum模块5. service模块6. systemd模块7. cron模块8. user模块9. group模块10. fetch模块11. get_url模块12. unarchive模块13. synchronize模块14. block模块15. parted模块16. firewalld模…

Linux ps命令:查看正在运行的进程

ps 命令是最常用的监控进程的命令&#xff0c;通过此命令可以查看系统中所有运行进程的详细信息。 ps 命令的基本格式如下&#xff1a; [rootlocalhost ~]# ps aux #查看系统中所有的进程&#xff0c;使用 BS 操作系统格式 [rootlocalhost ~]# ps -le #查看系统中所有的进程&am…

Vue中常用到的标签和指令

一、标签 在 Vue 中&#xff0c;并没有特定的标签是属于 Vue 的&#xff0c;因为 Vue 是一个用于构建用户界面的框架&#xff0c;可以与 HTML 标签一起使用。Vue 中可以使用的标签和元素基本上与 HTML 标准一致。 以下是一些常见的HTML标签&#xff0c;也可以在 Vue 中使用&a…

HTML+CSS+JavaScript:随机抽奖案例

一、需求 在时代少年团的七个人中&#xff0c;随机抽取一个人获得一等奖&#xff0c;再抽取一个获二等奖&#xff0c;再抽取一个获三等奖。注意同一个人不能同时获得多个奖项 如下图所示 二、代码素材 以下是缺失JS部分的代码&#xff0c;感兴趣的小伙伴可以先自己试着写一写…

oracle数据库dbLink的使用

Oracle的数据库链路&#xff08;dbLink&#xff09;是一种允许在两个不同的数据库实例之间进行通信和数据交换的功能。它可以让你在一个数据库中访问另一个数据库的对象和数据&#xff0c;就像它们属于同一个数据库一样。 创建一个link: CREATE public DATABASE LINK link_sco…

计算机网络用户接入层设计

用户接入层为用户提供访问核心网络的能力&#xff0c; 为用户提供共享/交换的带宽分配&#xff0c;按照业主要求,并考虑到端口密度的要求以及 设备的性能价格比,建议选用 Catalyst 3524XL和 Catalyst 3548XL 工作组交换 机&#xff0c;分别放置于配线间中。如同一配线间需两台以…

PyCharm安装使用2023年教程,PyCharm与现流行所有编辑器对比。

与PyCharm类似的功能和特性的集成开发环境&#xff08;IDE&#xff09;和代码编辑器有以下几种&#xff1a; Visual Studio Code&#xff08;VS Code&#xff09;&#xff1a;由Microsoft开发&#xff0c;VS Code是一个高度可定制和可扩展的代码编辑器。它支持多种编程语言&am…