Qt(二):使用udp发送与接收图片

news2024/11/28 3:28:34

使用Qt来通过UDP协议发送和接收图片可以分为几个步骤。以下是一个基本的指南:

发送图片
准备图片数据:首先,你需要将图片转换为可以在网络上传输的数据格式。通常,这涉及到将图片转换为字节数组。
设置UDP套接字:在Qt中,你可以使用QUdpSocket类来创建UDP套接字。你需要指定目标地址和端口号。
发送数据:使用writeDatagram方法将图片数据发送到目标地址。

//发送udp
void MainWindow::sendMess(){
    QByteArray receBuffer;//创建接收字节流
    QBuffer bufferDevice(&receBuffer);//
    bufferDevice.open(QIODevice::WriteOnly);//打开缓冲区,写入字节流
    image.save(&bufferDevice,"png");//图像保存为指定类别
    QHostAddress address("192.168.1.100");//创建IP地址
    quint16 port =1234;//创建端口号
    sendUdp->writeDatagram(receBuffer,QHostAddress::Broadcast,port);//将图片转为字节流发送到指定地址、端口
    sendUdp->flush();
    qDebug()<<"发送字节流:"<<receBuffer.size();
}

//选择图像
void MainWindow::on_pBtn_selectImage_clicked()
{
    ui->label->setText("");//清空文本
    //打开文件
    QString fileName=QFileDialog::
                     getOpenFileName(this,"open file",
                     QDir::currentPath(),"Image File(*.jpg *.png)");
    image.load(fileName);//导入图片
    ui->label->setPixmap(QPixmap::fromImage(image));//将图像显示在标签label
    ui->label->resize(image.width(),image.height());//根据图像的大小调整显示大小

}

//发送图像
void MainWindow::on_pBtn_sendImage_clicked()
{
    sendUdp=new QUdpSocket(this);//创建字节套
    timerSend=new QTimer(this);
    connect(timerSend,&QTimer::timeout,this,&MainWindow::sendMess);//启动定时器发送图片信息
    timerSend->start(1000);//1s发一次
}

//停止发送
void MainWindow::on_pushButton_clicked()
{
    timerSend->stop();
    disconnect(timerSend,&QTimer::timeout,this,&MainWindow::sendMess);
    qDebug()<<"停止发送";
}

接收图片

设置UDP套接字:同样,你需要使用QUdpSocket来创建一个UDP套接字。
接收数据:使用readDatagram方法来接收数据。你需要处理接收到的数据,并将其转换回图片格式。

//接收udp
void MainWindow::udpRece(){
//    receUdp->waitForReadyRead(100);//等待10ms写入
    while(receUdp->hasPendingDatagrams()){
        quint64 size=receUdp->pendingDatagramSize();//读取字节流大小
        QByteArray receData;//创建接收字节流
        receData.resize(size);//改变与发送端的字节流大小一样
        receUdp->readDatagram(receData.data(),receData.size());//读取发送端的字节流
        QBuffer receBuffer(&receData);//
        QImageReader reader(&receBuffer,"png");
        QImage receImage=reader.read();
        sence=new QGraphicsScene(ui->graphicsView);
        ui->graphicsView->setScene(sence);
        QGraphicsPixmapItem *pixmapItem=
                new QGraphicsPixmapItem(QPixmap::fromImage(receImage));
        sence->addItem(pixmapItem);
        qDebug()<<"接收端字节流大小:"<<receData.size();
    }
}

//开始接收连接
void MainWindow::on_pBtn_receImage_clicked()
{

    timerRece=new QTimer(this);
    connect(timerRece,&QTimer::timeout,this,&MainWindow::udpRece);
    timerRece->start(1000);
//    receUdp=new QUdpSocket(this);
//    receUdp->bind(QHostAddress::Any,1234);
//    connect(receUdp,&QUdpSocket::readyRead,this,&MainWindow::udpRece);
}

//停止接收
void MainWindow::on_pBtn_stopRece_clicked()
{
    timerRece->stop();
    disconnect(timerRece,&QTimer::timeout,this,&MainWindow::udpRece);
    qDebug()<<"停止接收";
}

结果显示:

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

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

相关文章

Go 泛型之泛型约束

Go 泛型之泛型约束 文章目录 Go 泛型之泛型约束一、引入二、最宽松的约束&#xff1a;any三、支持比较操作的内置约束&#xff1a;comparable四、自定义约束五、类型集合&#xff08;type set&#xff09;六、简化版的约束形式七、约束的类型推断八、小结 一、引入 虽然泛型是…

水果软件2024FL Studio21.3mac苹果中文版

FL STUDIO21发布&#xff0c;提供您一直在等待的出色工作流程功能。通过新效果、多个播放列表曲目选择和无所畏惧的撤消一切编辑&#xff0c;将您的音乐带入2024年。FL Studio21中文完整版是一个功能齐全、开放式架构的PC音乐创作和制作环境。它具有基于音乐音序器的图形用户界…

uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强制在线用户更新

实现登录即更新&#xff0c;或实时监听更新 本文介绍的是在App打开启动的时候调用更新&#xff0c;点击下方链接&#xff0c;查看使用WebSocket实现实时通知在线用户更新。 uniapp&#xff1a;全局消息是推送&#xff0c;实现app在线更新&#xff0c;WebSocket&#xff0c;ap…

白话机器学习的数学-1-回归

1、设置问题 投入的广告费越多&#xff0c;广告的点击量就越高&#xff0c;进而带来访问数的增加。 2、定义模型 定义一个函数&#xff1a;一次函数 y ax b &#xff08;a 是斜率、b 是截距&#xff09; 定义函数&#xff1a; 3、最小二乘法 例子&#xff1a; 用随便确定的参…

常见HTTP 500错误发生原因及解决办法剖析

​  对于网站运营者来说&#xff0c;提到500内部服务器错误并不陌生。互联网行业对它的称呼有好几种&#xff0c;如“500内部服务器错误”、“HTTP 500 - 内部服务器错误”、“临时错误 (500)”、“内部服务器错误”。尽管叫法不同&#xff0c;但根本问题是相同的。 目前&…

【Shell编程练习】通过位置变量创建 Linux 系统账户及密码

系列文章目录 输出Hello World 系列文章目录位置变量代码实现运行结果 位置变量 位置变量将以数字方式对变量进行命名&#xff0c;可将命令行参数的值存储到脚本中。要从命令行、函数或脚本执行等处传递参数时&#xff0c;就需要在 Shell 脚本中使用位置参数变量。下表为常用…

git unable to create temporary file: No space left on device(git报错)

1.问题 1.1 vscode中npm run serve跑项目的时候&#xff0c;进度达到95%的时候一直卡着无进度&#xff1b; 1.2 git命令提交代码报错&#xff1b; 2.具体解决 这个错误通常表示你的磁盘空间已经满了&#xff0c;导致 Git 无法在临时目录中创建文件。2.1 清理磁盘空间&#xf…

硅像素传感器文献调研(五)

写在前面之文献检索 —————————————————————————————————————————— 首先感慨一下sci-hub强大的检索能力。这篇论文在学校的数据库都没有搜到 来源是上篇论文的引用部分&#xff0c;截图如下&#xff1a; 先在谷歌学术镜像找到了&a…

数据结构 day6 栈+队列+二分查找+插入排序

插入排序 #include <stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, const char *argv[]) {int a[]{41,50,66,38,32,49,18};int nsizeof(a)/sizeof(a[0]);int i,j,t;for(i1;i<n;i){int ta[i];for(ji-1;j>0;j--){if(t<a[j]){a…

flutter学习-day21-使用permission_handler进行系统权限的申请和操作

文章目录 1. 介绍2. 环境准备2-1. Android2-2. iOS 3. 使用 1. 介绍 在大多数操作系统上&#xff0c;权限不是在安装时才授予应用程序的。相反&#xff0c;开发人员必须在应用程序运行时请求用户的许可。在 flutter 开发中&#xff0c;则需要一个跨平台(iOS, Android)的 API 来…

跨境电商卖家一般用海外云手机做什么?

近些年&#xff0c;海外云手机在跨境电商领域已经逐渐流行开来&#xff0c;但是对于许多人来说海外云手机还是比较陌生&#xff0c;它有什么作用&#xff1f;它可以用于哪些场景&#xff1f;在本文中&#xff0c;我们将详细跨境电商卖家一般是怎样使用海外云手机的。 1. 海外网…

算法导论复习(七) 动态规划

动态规划一般用来求解最优化问题 设计一个动态规划算法一般有以下四步&#xff1a; 描述一个最优解的结构特征。递归地定义最优解的值。计算最优解的值&#xff0c;通常采用自底向上的方法。利用计算出的信息构造出一个最优解。 钢条切割问题 体现了动态规划的一个重要性质&a…

如何开发一个google插件(二)

前言 在上一篇文章如何开发一个google插件(一)里主要介绍了google插件的基本结构。 在这篇文章中主要结合reactwebpack进行一个代码演示&#xff0c;源码地址&#xff1a;源码地址 下载源码后打开浏览器的扩展程序管理->加载已解压的扩展程序&#xff0c;即可调试插件 此…

软件测试/测试开发丨学习笔记之Python运算符

运算符的作用 Python基础语法的内容通常表示不同数据或变量之间的关系 算数运算符 运算符描述加-减*乘/除%取模**幂//取整除 取模与取余区别 概念上&#xff1a;取模是计算机术语&#xff0c;取余属于数学概念&#xff1b; 结果上&#xff1a;当同号的两个数相除&#xff…

软件测试/测试开发丨Python内置库学习笔记

内置库 一、内置库OS 1、os概述 os: Operating Systemos 模块的常用功能跨平台的差异 2、os使用 导入 os 模块查看 os 模块使用文档 help(os)dir(os) import os# 查看os模块说明文档 help(os)# 查看os模块的属性和方法 print(dir(os))3、os 常用方法 &#xff08;1&…

浅谈WPF之控件模板Control Template和数据模板Data Template

WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计&#xff0c;同时还推出了以模板为核心的新一代设计理念。在WPF中&#xff0c;通过引入模板&#xff0c;将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类&#xff1a;数据模板【Data Template】和控…

仪表盘、数据分析新增分享功能及应用服务下新增服务实例菜单

近期&#xff0c;博睿数据根据一体化智能可观测平台 Bonree ONE 产品本身&#xff0c;以及用户反馈进行持续的更新和优化。以下为 Bonree ONE 产品功能更新报告第03期内容&#xff0c;更多探索&#xff0c;未完待续。 本次迭代的更新集中在平台的仪表盘、数据分析新增分享功能&…

JS + CSS 实现高亮关键词(不侵入DOM)

之前在做关键词检索高亮功能的时候&#xff0c;研究了下目前前端实现高亮的几种方式&#xff0c;第一就是替换dom元素实现高亮&#xff0c;第二就是利用浏览器新特性Css.highlights结合js选区与光标与CSS高亮伪类实现&#xff0c;实现功能如下&#xff1a; 一、页面布局 一个…

文献速递:人工智能医学影像分割---高效的MR引导CT网络训练,用于CT图像中前列腺分割

01 文献速递介绍 如今&#xff0c;根据国家癌症研究所的报告&#xff0c;美国约有9.9%的男性患有前列腺癌。1 此外&#xff0c;根据美国癌症协会的数据&#xff0c;预计2019年将有174,650个新病例被诊断出前列腺癌&#xff0c;与此同时大约有31,620名男性将死于前列腺癌。因此…

聚焦亚马逊云科技 re:Invent re:Cap专场,重构生成式AI的无限可能!

摘要&#xff1a;12月14日至17日&#xff0c;第十二届全球软件案例研究峰会(简称TOP100summit)在北京国际会议中心成功举办&#xff0c;亚马逊云科技资深开发者布道师郑予彬、亚马逊云科技解决方案研发中心应用科学家肖宇、可以科技产品负责人曹临杰、亚马逊云科技解决方案架构…