当前位置: 首页 > news >正文

7.28

 1.思维导图

2.qt的sever

#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 readyRead_slot();         //自定义处理readyRead信号的槽函数private:Ui::Widget *ui;//定义服务器指针QTcpServer *server;//定义客户端容器QList<QTcpSocket*> socketList;
};
#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界面上的端口号quint16 port = ui->portEdit->text().toUInt();//将服务器设置成监听状态//函数原型: bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);//功能:监听客户端发来的连接请求//参数1:要监听的主机地址,any表示监听任意主机地址,也可以给定特定主机地址//参数2:提供的端口号,如果是0,表示让系统自动分配端口号//返回值:bool,成功监听返回true,失败返回falseif(server->listen(QHostAddress::Any, port)){QMessageBox::information(this,"", "服务器启动成功");}else{QMessageBox::information(this,"", "服务器启动失败");}//此时服务器已经进入监听状态,如果有客户端发来连接请求,那么该服务器就会自动发射一个newConnection信号//我们可以将该信号连接到自定义的槽函数中处理新连接的套接字connect(server, &QTcpServer::newConnection, this, &Widget::newConnection_slot);
}//处理newConnection信号的槽函数的实现
void Widget::newConnection_slot()
{qDebug()<<"有新客户连接";//获取最新连接的客户端套接字//函数原型:virtual QTcpSocket *nextPendingConnection();//功能:获取最新连接客户端的套接字//参数:无//返回值:套接字指针QTcpSocket* s = server->nextPendingConnection();//将该套接字放入到客户端容器中socketList.push_back(s);//此时,客户端与服务器已经建立起来连接//如果有客户端向服务器发来数据,那么该客户端会自动发射一个readyRead信号//我们可以在该信号对应的槽函数中,读取客户端中的数据connect(s, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);
}
//关于readyRead信号对应槽函数的实现
void Widget::readyRead_slot()
{//移除无效客户端for(int i=0; i<socketList.count(); i++){//socketList.at(i)->state();    //任意一个客户端的状态//函数原型:SocketState state() const;//功能:返回套接字的状态//参数:无//返回值:套接字状态,是个枚举值,如果为0,表示无效连接if(socketList.at(i)->state() == 0){//移除该客户端socketList.removeAt(i);    //将下标为i的套接字从链表中移除}}//遍历客户端套接字,寻找是哪个客户端有数据待读for(int i=0; i<socketList.count(); i++){//判断当前套接字是否有数据待读//函数原型:qint64 bytesAvailable() const override;//功能:求出当前套接字中待读数据的个数//参数:无//返回值:待读数据的个数if(socketList.at(i)->bytesAvailable() != 0){//说明当前套接字中有数据//读取当前套接字中的数据//函数原型:QByteArray readAll();//功能:读取套接字中的所有数据//参数:无//返回值:QByteArray读取下来的数据QByteArray msg = socketList.at(i)->readAll();//将数据展示到ui界面ui->msgWidget->addItem(QString::fromLocal8Bit(msg));//将数据发送给所有客户端for (int j=0; j<socketList.count(); j++){//将数据写入到所有客户端套接字中socketList.at(j)->write(msg);}}}
}

3.时钟

 

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QTime>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *event) override;void timerEvent(QTimerEvent *e);private:Ui::Widget *ui;int tid;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);tid = startTimer(1);
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{QPainter p(this);p.translate(this->width()/2,this->height()/2);QPen pen1(QColor("#fb7299"));pen1.setWidth(5);p.setPen(pen1);p.drawEllipse(QPoint(0,0),250,250);for(int i=0;i<60;i++){if(i%5==0){p.drawText(0,-225,QString("%1").arg(i/5));QPen pen2(QColor("#fb7299"));pen2.setWidth(5);p.setPen(pen2);p.drawLine(0,-240,0,-247);}else{p.setPen(pen1);p.drawLine(0,-245,0,-250);}p.rotate(6);}QTime t = QTime::currentTime();pen1.setColor("red");pen1.setWidth(20);p.setPen(pen1);p.rotate(t.hour()%12*30+t.minute()*0.5+t.second()*(0.5/60));p.drawLine(0,10,0,-100);QPainter p2(this);p2.translate(this->width()/2,this->height()/2);pen1.setColor("green");pen1.setWidth(10);p2.setPen(pen1);p2.rotate(t.minute()*6+t.second()*(6/60));p2.drawLine(0,15,0,-150);QPainter p3(this);p3.translate(this->width()/2,this->height()/2);pen1.setColor("blue");pen1.setWidth(5);p3.setPen(pen1);p3.rotate(t.second()*6);p3.drawLine(0,20,0,-200);
}void Widget::timerEvent(QTimerEvent *e)
{this->update();
}

相关文章:

7.28

1.思维导图 2.qt的sever #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> //服务器类 #include<QTcpSocket> //客户端类 #include<QMessageBox> //对话框类 #include<QList> …...

java线程中的常见方法(详解)

方法简介 方法名 功能 说明 start() 启动一个新线程&#xff0c;在新的线程运行 run 方法中的代码 start 方法只是让线程进入就绪&#xff0c;里面代码不一定立刻运行&#xff08;CPU 的时间片还没分给它&#xff09;。每个线程对象的start方法只能调用一次&#xff0c;如…...

线程池参数配置

上次面试被人问到&#xff0c;如果是IO 密集型的任务&#xff0c;该如何配置合适的线程数&#xff0c;当初我说要按照IO具体的请求毫秒时间&#xff0c;来配置具体的线程数。 NthreadsNcpu*(1w/c) 公式中 W/C 为系统 阻塞率 w:等待时间 c:计算时间一般情况下&#xff0c;如果存…...

Spread for Winform 16.2.20231.0 (SP2) Crack

Spread for Winform 16.2.20231.0 (SP2)发布。此版本包含针对客户报告的问题的重要修复&#xff1a; 安装版本 16 后&#xff0c;FarPoint.Localization.dll 将丢失。 将数据绑定到 Spread 时会出现 InvalidOperationException。 通过 Spread Designer 设置的上标将不会保留。…...

Go程序结构

Go程序结构 1、名称 ​ 名称的开头是一个字母或下划线&#xff0c;且区分大小写。 实体第一个字母的大小写决定其可见性是否跨包&#xff1a; ​ 若名称以大写字母开头&#xff0c;它是导出的&#xff0c;对包外是可见和可访问的&#xff0c;可以被自己包以外的其他程序所引用…...

JAVA面试总结-Redis篇章(四)——双写一致性

JAVA面试总结-Redis篇章&#xff08;四&#xff09;——双写一致性 问&#xff1a;redis 做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&#xff1f;第一种情况&#xff0c;如果你的项目一致性要求高的话 采用以下逻辑我们应该先删除缓存&#xff0c;再修改数据库&…...

赋能医院数字化转型,医院拍摄VR全景很有必要

医院有没有必要拍摄制作VR全景呢&#xff1f;近期也有合作商问我们这个问题&#xff0c;其实VR智慧医院是趋势、也是机遇。现在外面很多的口腔医院、医美机构等都开始引入VR全景技术了&#xff0c;力求打造沉浸式、交互式的VR智慧医院新体验&#xff0c;通过VR全景展示技术来助…...

Vue3项目中没有配置 TypeScript 支持,使用 TypeScript 语法

1.安装 TypeScript&#xff1a;首先&#xff0c;需要在项目中安装 TypeScript。在终端中运行以下命令 npm install typescript --save-dev2.创建 TypeScript 文件&#xff1a;在 Vue 3 项目中&#xff0c;可以创建一个以 .ts 后缀的文件&#xff0c;例如 MyComponent.ts。在这…...

数据可视化大屏拼接屏开发实录:屏幕分辨率测试工具

一、可视化大屏开发 在数据可视化大屏开发时&#xff0c;确定数据可视化大屏拼接屏的板块尺寸需要考虑以下几个因素&#xff1a; 屏幕分辨率&#xff1a;首先需要知道每个板块屏幕的分辨率&#xff0c;包括宽度和高度&#xff0c;这决定了每个板块上可以显示的像素数量。 数据…...

每日一题7.28 209

209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 本题应该是用前缀…...

Python + Playwright 无头浏览器Chrome找不到元素

用Python Playwright调试时&#xff0c;发现不用无头浏览器&#xff08;即headlessFalse&#xff09;代码能够运行成功&#xff0c;但是一用无头浏览器时&#xff08;即headlessTrue&#xff09;就会报错&#xff0c;提示找不到元素。换成Firefox浏览器又不会有这个问题&#…...

C++信号量与共享内存实现进程间通信

关于信号量和共享内存的相关知识可参考下面链接&#xff1a; 进程间通信方式介绍_夜雨听萧瑟的博客-CSDN博客 C 创建共享内存_c共享内存_夜雨听萧瑟的博客-CSDN博客 信号量SytemV与Posix信号量的介绍与用法_夜雨听萧瑟的博客-CSDN博客 直接上代码&#xff0c;代码如下&#…...

[Tools: Camera Conventions] NeRF中的相机矩阵估计

参考&#xff1a;NeRF代码解读-相机参数与坐标系变换 - 知乎 在NeRF中&#xff0c;一个重要的步骤是确定射线&#xff08;rays&#xff09;的初始点和方向。根据射线的初始点和方向&#xff0c;和设定射线深度和采样点数量&#xff0c;可以估计该射线成像的像素值。估计得到的…...

【sgUpload】自定义上传组件,支持上传文件夹及其子文件夹文件、批量上传,批量上传会有右下角上传托盘出现,支持本地上传图片转换为Base64image

特性&#xff1a; 支持批量上传文件、文件夹可自定义headers可自定义过滤上传格式可自定义上传API接口支持drag属性开启可拖拽上传文件、文件夹 sgUpload源码 <template><div :class"$options.name" :dragenter"isDragenter"><!-- 上传按钮…...

Kafka 实时处理Stream与Batch的对比分析

Kafka 实时处理Stream与Batch的对比分析 一、简介1. Kafka的定义和特点2. Kafka实时处理基础架构 二、Stream和Batch1. Stream和Batch的区别2. 对比Stream和Batch的优缺点Stream的优缺点Batch的优缺点 三、使用场景1. 使用场景对比Batch使用场景Stream使用场景 2. 如何选择Stre…...

Andriod开发性能优化实践

文章目录 内存优化布局优化网络优化图片优化内存泄露绘制优化 内存优化 在Android开发中&#xff0c;有一些实践可以帮助进行内存优化&#xff0c;以减少应用程序的内存占用和提高性能。以下是一些常见的内存优化实践&#xff1a; 使用合适的数据结构和集合&#xff1a;选择合…...

linux环境安装mysql数据库

一&#xff1a;查看是否自带mariadb数据库 命令&#xff1a;rpm -qa | grep mariadb 如果自带数据库则卸载掉重新安装 命令&#xff1a;yum remove mariadb-connector-c-3.1.11-2.el8_3.x86_64 二&#xff1a;将压缩文件上传到/user/local/mysql文件夹 或者直接下载 命令&a…...

【深度学习中常见的优化器总结】SGD+Adagrad+RMSprop+Adam优化算法总结及代码实现

文章目录 一、SGD&#xff0c;随机梯度下降1.1、算法详解1&#xff09;MBSGD&#xff08;Mini-batch Stochastic Gradient Descent&#xff09;2&#xff09;动量法&#xff1a;momentum3&#xff09;NAG(Nesterov accelerated gradient)4&#xff09;权重衰减项&#xff08;we…...

山东大学软件学院考试回忆——大二上

文章目录 学习科目整体回忆上课考试回忆Web技术大学物理概率与统计计算机组织与结构离散数学&#xff08;2&#xff09;数据结构&#xff08;双语&#xff09; 学习科目 Web技术大学物理概率与统计计算机组织与结构离散数学&#xff08;2&#xff09;&#xff08;双语&#xf…...

【Express.js】异常分类和日志分级

异常分类和日志分级 第一章已经介绍过全局的异常处理了&#xff0c;但之前的做法过于简单&#xff0c;一股脑的捕获并返回。这一节我们将对异常进行细致的分类&#xff0c;并且日志也做标准化的分级。 准备工作 一个基础的 evp-express 项目 NodeJS Error 先了解一下 Node…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...