qt 实现UDP通信简单案例

2023-10-27

实现效果

在这里插入图片描述

实现功能

创建两个界面,可以通过udp进行通信,并显示通信内容。
界面部分由代码实现,并使用qss简单美化。
udp通信由创建套接字,绑定端口号,发送和接收数据函数完成。

代码实现

创建第一个通信对象
ud1.h

#ifndef UDPUSER
#define UDPUSER

#include <QMainWindow>
#include <QLabel>
#include <QPushButton>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QList>
#include <QLineEdit>
#include <QGridLayout>
#include <QUdpSocket>

class udpUser : public QMainWindow
{
    Q_OBJECT

public:
    udpUser(QWidget *parent = nullptr);
    ~udpUser();
    void layOut();

private:
    QLabel* myLabel[5];
    QPushButton *sendButton;
    QTextEdit *recordText;
    QTextEdit *textEdit;
    QVBoxLayout *vLayOut;
    QList<QString> labelName;
    QList<QString> labelNum;
    QLineEdit *myLine[3];
    QGridLayout *gridLayout;
    QUdpSocket *udpSocket;

};
#endif

ud1.cpp

#include "udp1.h"
#include <QByteArray>
#include <QDebug>
#include <QHostAddress>

udpUser::udpUser(QWidget *parent)
    : QMainWindow(parent)
{
    layOut();
    udpSocket = new QUdpSocket(this);
    udpSocket->bind(QHostAddress::LocalHost, myLine[0]->text().toInt());

    connect(sendButton, &QPushButton::clicked,
            [=](){

        if(textEdit->toPlainText() != "")
        {
            qint64 size = textEdit->toPlainText().size();
            QByteArray msg = textEdit->toPlainText().toUtf8();
            udpSocket->writeDatagram(msg.data(), size, QHostAddress(myLine[2]->text()), myLine[1]->text().toInt());
            recordText->append("我说:" + textEdit->toPlainText());
            textEdit->clear();
        }
    });

    //槽函数处理按键发送和接收处理
    //接收数据
   connect(udpSocket, &QUdpSocket::readyRead,
           [=](){

    QByteArray msg;
    while(udpSocket->hasPendingDatagrams())
    {
        msg.resize(udpSocket->pendingDatagramSize());
        udpSocket->readDatagram(msg.data(), msg.size());
        recordText->append("她说:" + msg);
    }
   });


}

udpUser::~udpUser()
{
    delete udpSocket;
}

void udpUser::layOut()
{
    QWidget *window = new QWidget;
    window->setObjectName("ud2Widget");
    this->setGeometry(900, 100, 480, 800);
    labelName << "myPort" << "toPort" << "toIp" ;
    labelNum << "9999" << "8888" << "127.0.0.1";
    vLayOut = new QVBoxLayout();
    gridLayout = new QGridLayout();

    for(int i=0; i<3; i++)
    {
        myLabel[i] = new QLabel();
        myLabel[i]->setText(labelName[i]);
        myLine[i] = new QLineEdit();
        myLine[i]->setText(labelNum[i]);
        gridLayout->addWidget(myLabel[i], i, 0);
        gridLayout->addWidget(myLine[i], i, 1);
        myLabel[i]->setObjectName("ud2Label" + QString::number(i));
    }

    myLabel[3] = new QLabel("聊天记录");
    myLabel[3]->setObjectName("ud2Record");
    myLabel[4] = new QLabel("输入内容");
    myLabel[4]->setObjectName("ud2Input");

    recordText = new QTextEdit();
    textEdit = new QTextEdit();
    sendButton = new QPushButton();
    sendButton->setText("发送");
    sendButton->setObjectName("ud2Send");
    recordText->setReadOnly(true);
    textEdit->setMaximumHeight(200);

    vLayOut->addLayout(gridLayout);
    vLayOut->addWidget(myLabel[3]);
    vLayOut->addWidget(recordText);
    vLayOut->addWidget(myLabel[4]);
    vLayOut->addWidget(textEdit);
    vLayOut->addWidget(sendButton, 0, Qt::AlignRight);


    window->setLayout(vLayOut);
    this->setCentralWidget(window);
}

ud2代码实现同ud1

main.cpp

#include "mainwindow.h"
#include "udp2.h"
#include <QFile>
#include <QDebug>

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFile file(":/style.qss");

    if(file.exists())
    {
        qDebug() << "qss file exits" << endl;
        file.open(QFile::ReadOnly);
        QString styleSheet = QLatin1String(file.readAll());
        qApp->setStyleSheet(styleSheet);
        file.close();
    }
    MainWindow w;
    udpUser user2;
    user2.show();
    w.show();
    return a.exec();

总结

代码中涉及的变量转换参考文章:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt 实现UDP通信简单案例 的相关文章

  • 如何使用 qt 库中的调试符号为 qt 5.5 创建开发 shell

    我有一个开发外壳buildInputs条目包括qt55 qtbase 这很好用 今天 我在 qt 库中发生了段错误 我想要带有调试符号的 qt 库 我看了一下nixpkgs pkgs development libraries qt 5 5
  • QT C++ QRegularExpression 多个匹配

    我想使用正则表达式从 QString html 中提取信息 我明确想使用正则表达式 无解析器解决方案 和类Q正则表达式 http qt project org doc qt 5 0 qtcore qregularexpression htm
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 如何使用bind将成员函数作为函数指针传递?

    我试图将成员函数作为函数指针传递 这样我就不需要依赖单例或全局函数来处理 Qt 5 中的 Qt 消息 据我所知 我的 std function 是正确的类型 它具有正确的签名 并且绑定应该允许我插入隐式this指针 本质上是将成员函数传递为
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • 错误号:11,资源暂时不可用

    我正在使用 c 套接字来实现可靠的 UDP 协议 我正在使用以下代码在等待确认的套接字上设置超时 我不确定为什么会收到 errno 11 资源暂时不可用 set timer for recv socket struct timeval tv
  • 在另一个中使用 QAbstractListModel

    我在尝试使用 Qt QML 为我的应用程序开发数据模型时遇到问题 我已经用过一个QAbstractListModel能够将海关数据模型从 C 传递到 QML 并且它对于简单模型 例如基于字符串和布尔的模型 来说就像一个魅力 但现在我需要建立
  • 构建qt程序时未定义的符号:找不到qt_version_tag

    我正在学习Qt5 6 我正在使用 Ubuntu 14 4 当我链接我的程序时 出现以下错误 undefined reference to qt version tag 在 CMakeLists txt 中 link libraries Qt
  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • Qmake 不支持源目录下的构建目录

    我创建了一个可以在 OS X 上编译和运行的应用程序 我现在想开始让它在 Windows 上运行 首先 我将项目复制到 Windows 机器上并尝试编译 但收到此错误 警告 Qmake不支持源目录下的构建目录 有任何想法吗 将影子构建目录设
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 如何使用样式表删除 QWizard 中的水平线?

    我正在研究一个样式表QWizard我想删除按钮上方的水平线 我已经发布了一个最小的例子here https stackoverflow com q 52538669 8570451 这个问题是由scopchanov从最小的例子中解决的 但是
  • QGraphicsView 在完整布局中未最大化

    I have following GUI having four QGraphicView objects 正如您在每个视图下看到的那样 它有四个工具按钮 为了最大化视图 我连接了工具按钮的信号来隐藏其他三个视图的插槽 并将大小策略设置为扩
  • Qt:关闭模式对话框关闭程序

    在我的 Qt 程序中 我有 2 个窗口 主窗口和子窗口 在程序中 一次仅显示这些窗口之一 主窗口有一个插槽 用于创建模式对话框 现在 假设子窗口中单击按钮的信号被发送到该插槽 在这种情况下 主窗口隐藏 子窗口可见 对话框显示得很好 但是当对
  • QListWidget 拖放项目从 Symbian 列表中消失

    我在实现带有可通过拖放重新排序的自定义项的 QListWidget 时遇到问题 问题是当我在某个项目上快速双击 非常短的拖放 时 该项目有时会从 QListWidget 中消失 这是我的小部件的构造函数 ListPopisiDragDrop
  • QStandardItemModel::removeRows() 在我的用例中不起作用

    基本上我想删除模型中的所有行 我更喜欢使用removeRows 代替clear 因为我想保留我的标题 我想我错过了一些东西 文档在这里 http doc qt nokia com 4 7 snapshot qstandarditemmode
  • 如何在 PySide/PyQt 中制作一个位于屏幕中央的小部件?

    这段代码有效 但我想知道是否有更简单的方法 def center self qr self frameGeometry cp gui QDesktopWidget availableGeometry center qr moveCenter
  • 派生类在 PySide (Qt/PyQt) 中的错误线程中接收信号

    我在让派生类在 PySide 中正确接收信号时遇到问题 我在主 GUI 或命令行应用程序 线程的两个单独线程上使用发送器和接收器 线程是 QThread 对象 发送器和接收器在创建后立即使用 QObject moveToThread 移动到
  • 在 4K 屏幕上使用 Matplotlib 和 TKAgg 或 Qt5Agg 后端

    我在 Ubuntu 16 04 上使用 Matplotlib 2 0 和 Python 3 6 来创建数据图 电脑显示器的分辨率为 4k 分辨率为 3840x2160 绘图数字看起来非常小 字体也很小 我已经尝试过TKAgg and Qt5
  • Qt 5.5 QOpenGLWidget 链接错误未链接任何 openGL 调用

    我尝试使用 Qt 5 5 1 构建一个简单的 OpenGL 应用程序 一切都很好 直到我尝试使用 glClearColor 等 openGL 本机函数调用 该小部件实际上编译并产生黑屏 但在我尝试使用任何 openGL 本机函数后 它甚至不

随机推荐

  • katex

    Katex Accents Accent functions inside text Delimiters Delimiter Sizing Environments Letters and Unicode Other Letters Un
  • Android ----蓝牙架构

    蓝牙 1 fromwork 2 service 3 driver Bluetooth apk bluedroid 芯片厂家 fromwork到service直接调用 service到driver利用service调用 fromwork到dr
  • 【机器学习 - 4】:线性回归算法

    文章目录 线性回归 线性回归的理解 损失函数 简单线性回归 封装线性回归算法 线性回归算法 在sklearn中调用线性回归算法 向量化运算 线性回归模型中的误差 均方误差 MSE 均方根误差 平均绝对误差 调用sklearn中的均方根误差和
  • 位置式和增量式PID控制

    PID控制是一个二阶线性控制器 定义 通过调整比例 积分和微分三项参数 使得大多数的工业控制系统获得良好的闭环控制性能 优点 a 技术成熟 b 易被人们熟悉和掌握 c 不需要建立数学模型 d 控制效果好 e 鲁棒性 通常依据控制器输出与执行
  • 测试管理之测试过程

    测试过程 以此文来阐述自己对于测试过程的认识 目录 文章目录 目录 过程分类 测试过程主要分为测试前 测试中 测试完成 发布后 测试前 测试前注意事项 需求评审 参与评审 了解需求背景 需求详情以及需求价值 初步评估需求覆盖面 需求测试工作
  • CSS背景:背景色/背景图像/背景重复/背景附着/简写背景属性(一文搞懂)

    目录 CSS背景 CSS 背景色 实例 其他元素 实例 不透明度 透明度 实例 使用 RGBA 的透明度 实例 CSS 背景图像 实例 实例 实例 CSS 背景重复 实例 实例 CSS background repeat no repeat
  • 程序员版孔乙己

    互联网的格局 是和别处不同的 都是格子衫 稀疏的头发 双肩包 男 写代码的人 傍午傍晚散了工 每每三两人 背着手 沿着软件园溜达一圈 倘肯花点钱 便还会走到星巴克 买一杯咖啡 那样便能再多摸几分钟的鱼 我从十九岁起 便在软件园的星巴克打工
  • Vim 键盘贴纸(打印用)

    Vim是一个类似于Vi的著名的功能强大 高度可定制的文本编辑器 在Vi的基础上改进和增加了很多特性 vim学习过程中需要记住好多键位的使用 下面分享一下vim键位图 打印后贴在键盘上 原版下载地址 密码 ultv 注 作者纯手工打造 难免有
  • 数据相关知识点(数据资产、业务底座、业务中台、企业数仓、即席查询)

    业务底座 企业数仓所提供的支撑能力 业务中台 企业在经营过程中积累起来的 具有一定规模的且能够快速适应变化 能够支撑器企业数字化转型升级的能力 企业数仓 又名企业数据仓库 是一个面向主题的 集成的 非易失的且随时间变化的数据集合 用来支持管
  • 微信小程序自定义弹窗实现详解(可通用)

    本文为自定义弹窗 该内容可满足如下需求 自定义各种布局弹窗 点击弹窗布局外消失弹窗 弹出弹窗时背景阴影半透明 各方向弹出效果 本文为自下而上弹出 wxml 文件中 直接放到wxml的最底部就行了 十分简练
  • Unity之实现拖拽UI功能

    一 unity 图片切割 先把图片导入到Unity中 选中图片你会看到上边的Inspector界面 然后 选择Texture Type类型为Advanced 将Read Write Enabled选上 然后Sprite Mode选择Mult
  • [ Matlab ] 遗传算法求最短路径

    打包下载源代码 实例描述 配送中心数为 1 客户数 k 为 8 车辆总数 m 为 2 车辆载重皆为 8 吨 各客户点需求为 g i 1 2 8 单位为吨 已知客户点与配送中心的距离如表 1 其中 0 表示中心仓库 要求合理安排车辆的运输路线
  • 服务计算——web 技术 - 处理 Request 与 Response

    基于Negroni框架的cloudgo应用 本次实验是基于Negroni框架的应用 我设计了一个简单的四则运算应用 这个应用设计主要分为两部分 中间件设计 以及 main函数的设计 接下来就分别对这两个部分进行介绍 中间件设计 printF
  • VS2017配置Qt开发环境

    VS2017配置Qt开发环境 安装Qt5 12 11 安装Qt插件 在VS2017中进行设置 参考教程 安装Qt5 12 11 安装Qt插件 在VS2017中进行设置 参考教程 Qt下载地址 https download qt io Qt安
  • 前端拖拽自动生成代码_我的前端布局自动化——开始,布局自动生成(一)

    在web前端工作的这些年 历经多次技术变革 不过依然只是一个追随大牛们的小白 此时此刻 尤其加班时 最想做的就是干掉自己职业的东西 做一个可代替前端工作的工具 由此开始了前端自动化探索 这篇文章就是自己的旗子吧 先举起一面变革之旗 不论自己
  • 关于Number.toFixed()的总结

    关于Number toFixed 函数的总结 前言 今天工作中遇到了一个需求 需要将类似于 1 99999 这样的数字格式化为 2 00 这样的两位小数 本来打算自己实现一个类似的功能函数 但是没想到看起来容易 实际实现起来却还是有点复杂的
  • Windows server 2016 云主机创建虚拟机

    Windows server 2016 云主机创建虚拟机 Hyper V 安装失败 处理器没有所需要的虚拟化功能 vmvare workstation play 17 安装 vmvare ok https customerconnect v
  • 【毕设教程】深度学习经典网络 CNN模型:ResNet

    文章目录 0 简介 1 ResNet 介绍 2 深度网络的退化问题 3 残差学习 4 ResNet的网络结构 5 ResNet的TensorFlow实现 6 最后 0 简介 Hi 大家好 这里是丹成学长的毕设系列文章 对毕设有任何疑问都可以
  • HTML-CSS笔记_0424

    HTML CSS 学习笔记源码 链接 https pan baidu com s 1PRorRSlAW0PSHM4grOoapg 提取码 fnr2 HTML 一 网页的基本结构和基础 1 html基础
  • qt 实现UDP通信简单案例

    实现效果 实现功能 创建两个界面 可以通过udp进行通信 并显示通信内容 界面部分由代码实现 并使用qss简单美化 udp通信由创建套接字 绑定端口号 发送和接收数据函数完成 代码实现 创建第一个通信对象 ud1 h ifndef UDPU