QT+网络调试助手+TCP客户端

news2024/12/23 19:44:52

一、网络调试助手UI界面 

编程主要思路:

首先将水平的控件  水平布局 ,然后相对垂直的控件  垂直布局  ,哪怕是底下的groupBox也需要和里面的内容 水平布局,然后最后框选全部  栅格布局。如果需要界面自适应窗口大小,可以点击界面的空白处,然后点击栅格布局,即可界面自适应。

二、网络调试助手 控件名称修改

三、代码编写

 widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

#include <QTcpSocket>   //客户端头文件
#include <QTimer>
#include <QDateTime>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_clearReceivePushButton_clicked();
    void connected_slot();  //自定义处理信号的槽函数
    void readyRead_slot();  //自定义处理readyRead信号的槽函数
    void disconnected_slot();   //自定义处理disconnected信号的槽函数
    void on_connectPushButton_clicked();
    void on_sendPushButton_clicked();
    void on_clearSendPushButton_clicked();
    void on_sendCheckBox_stateChanged(int arg1);

private:
    Ui::Widget *ui;

    QTcpSocket *socket;//定义一个客户端指针
    QTimer *timer; //定义一个定时器用于定时发送数据
};
#endif // WIDGET_H

widget.c

#include "widget.h"
#include "ui_widget.h"

#include <QMessageBox>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //给客户端指针实例化空间
    socket = new QTcpSocket(this);

    //如果连接服务器成功,该客户端就会发射一个connected信号
    //我们可以将该信号连接到自定义的槽函数中处理相关逻辑
    //由于该连接只需要连接一次。所有在构造函数中即可
    connect(socket, &QTcpSocket::connected, this, &Widget::connected_slot);

    //客户端与服务器连接成功后,如果服务器向客户端发来数据,那么该客户端就会自动发射一个readyRead信号
    //我们可以将该信号连接到自定义槽函数中处理相关逻辑
    connect(socket, &QTcpSocket::readyRead, this, &Widget::readyRead_slot);

    //当客户端与服务器断开连接后,该客户端就会自动发射1一个disconnected信号
    //我们可以将该信号与自定义的槽函数连接
    //由于只需要连接一下,所有该连接写到构造函数即可
    connect(socket, &QTcpSocket::disconnected, this, &Widget::disconnected_slot);

    timer = new QTimer;
    timer->setInterval(1000);// 设置默认定时时长1000ms
    connect(timer, &QTimer::timeout, this, [=](){
        on_sendPushButton_clicked();
    });
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_clearReceivePushButton_clicked()
{
    ui->receivePlainTextEdit->clear();
}

void Widget::connected_slot()
{
    QMessageBox::information(this,"成功","连接服务器成功");
    ui->connectPushButton->setText("断开连接");
}

void Widget::readyRead_slot()
{
    QByteArray msg = socket->readAll();//读取该客户端中的数据
    QString str = ui->receivePlainTextEdit->toPlainText() +  "\r\n" ;
    if(ui->timeCheckBox->isChecked())//如果显示时间服务框被勾选
    {
        QDateTime nowtime = QDateTime::currentDateTime();
        str += "[" + nowtime.toString("yyyy-MM-dd hh:mm:ss") + "] " + QString::fromLocal8Bit(msg);
    }
    else
    {
        str += QString::fromLocal8Bit(msg);
    }
    ui->receivePlainTextEdit->setPlainText(str);//将数据展示在UI界面
}

//disconn信号对应槽函数的实现
void Widget::disconnected_slot()
{
    QMessageBox::information(this, "退出", "服务器断开");
    ui->connectPushButton->setText("连接服务器");
}


void Widget::on_connectPushButton_clicked()
{
    if(ui->connectPushButton->text().contains("连接服务器"))
    {
        QString hostName = ui->ipLineEdit->text();              //获取主机地址
        quint16 port = ui->portLineEdit->text().toUInt();       //获取端口号
        socket->connectToHost(hostName,port);
    }
    else
    {
        socket->close();
    }
}


void Widget::on_sendPushButton_clicked()
{
    //获取UI界面中的编辑的文本内容
    QString str = ui->sendTextEdit->toPlainText();

    //将消息发送给服务器
    socket->write(str.toLocal8Bit());
}


void Widget::on_clearSendPushButton_clicked()
{
    ui->sendTextEdit->clear();
}


void Widget::on_sendCheckBox_stateChanged(int arg1)
{
    if(arg1 == 0)//如果复选框没有被选中
    {
        timer->stop();//定时器停止发送
    }
    else
    {
        timer->start(ui->timeLineEdit->text().toInt());
    }
}

四、实验结果

五、完整工程

链接:https://pan.baidu.com/s/17FckX9WjpJuDNUk1OtP1SQ?pwd=8888 
提取码:8888 

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

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

相关文章

基于TL431的线性可调恒压恒流电源的Multisim电路仿真设计

1、线性电源的工作原理 在我们日常应用里&#xff0c;直流电是从市电或电网中的交流电获取的。例如15V直流电压源、24V直流电压源等等。交流电变为直流电的过程大概分为一下几步&#xff1a; 首先&#xff0c;交流电通过变压器降低其电压幅值。接着&#xff0c;经过整流电路进…

【Axure高保真原型】拖动穿梭选择器

今天和大家分享拖动穿梭选择器的原型模板&#xff0c;我们可以拖动两个选择器里的选项标签&#xff0c;移动到另外一个选择器里。那这个原型模板是用中继器制作的&#xff0c;所以使用也很方便&#xff0c;只需要在中继器表格里填写选项信息&#xff0c;即可自动生成交互效果&a…

SiteServer 插件之 用户登录插件-用户注册

1、请确保已经安装了“用户登录插件”,如下图。 2、 显示管理->包含文件管理->include/header.html->编辑,如下图。 3、代码如下。 <header><div class="wrap"><div class="top-box clearfix"><div class="left-box…

【AI】openai-quickstart 运行Jupyter Lab

openai-quickstart/openai_api /README-CN.md 【AI】指定python3.10安装Jupyter Lab 可以安装3.10版本的jupyter lab 但是直接输入命令无法启动 突然发现自己电脑2023年安装过anaconda3 C:\ProgramData\anaconda3\python.exe C:\ProgramData\anaconda3\cwp.py C:\ProgramData…

、、、、、

、、 、 transient 关键字总结 1&#xff09;transient修饰的变量不能被序列化&#xff1b;2&#xff09;transient只作用于实现 Serializable 接口&#xff1b;3&#xff09;transient只能用来修饰普通成员变量字段&#xff1b;4&#xff09;不管有没有 transient 修饰&…

ESP32-C3 Wi-Fi STA模式打通(1)

本文内容参考&#xff1a; ESP32 (WIFI)-AP、STA模式(14)_wifi接口 wifi_ap_channel_set-CSDN博客 【ESP-IDF】ESP32利用wifi联网&#xff08;STA模式&#xff09;_esp32ap和sta-CSDN博客 Wi-Fi 库 - ESP32 - — ESP-IDF 编程指南 latest 文档 特此致谢&#xff01; 一、概…

西奥机电食品质构仪与米饭软硬度的口感探秘

西奥机电食品质构仪与米饭软硬度的口感探秘 米饭&#xff0c;作为日常餐桌上的主角&#xff0c;其口感的好坏往往决定了整个用餐体验。其中&#xff0c;米饭的软硬度更是决定其口感的关键。今天&#xff0c;我们将借助西奥机电的食品质构仪&#xff0c;一同探秘米饭软硬度的口…

【mysql】深入探索mysql中的各种约束条件

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

AI大模型探索之路-训练篇15:大语言模型预训练之全量参数微调

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

.Net 8.0 下的新RPC,IceRPC之如何创建连接connection

作者引言 很高兴啊&#xff0c;我们来到了IceRPC之如何创建连接connection,基础引导&#xff0c;让自已不在迷茫&#xff0c;快乐的畅游世界。 如何创建连接connection 学习如何使用IceRPC&#xff0c;创建和接受连接。 连接有什么用途&#xff1f; 连接在 IceRPC 中发挥着核心…

深度学习中的注意力机制一(Pytorch 15)

一 简介 灵长类动物的视觉系统接受了大量的感官输入&#xff0c;这些感官输入远远超过了大脑能够完全处理的程度。然而&#xff0c; 并非所有刺激的影响都是相等的。意识的聚集和专注使灵长类动物能够在复杂的视觉环境中将注意力引向感 兴趣的物体&#xff0c;例如猎物和天敌。…

Baidu Comate智能代码助手-高效代码编程体验

关于Baidu Comate智能代码助手 智能代码助手简介 代码助手可以快速的帮我们补充代码&#xff0c;修改代码&#xff0c;添加注释&#xff0c;翻译中英文&#xff0c;起变量函数名字等操作&#xff0c;十分的友好&#xff0c;这类代码助手现阶段有较多的产品&#xff0c;比如&a…

深度学习-线性回归+基础优化算法

目录 线性模型衡量预估质量训练数据参数学习训练损失最小化损失来学习参数显式解 总结基础优化梯度下降选择学习率 小批量随机梯度下降选择批量大小 总结线性回归的从零开始实现实现一个函数读取小批量效果展示这里可视化看一下 线性回归从零开始实现线性回归的简洁实现效果展示…

【C++】学习笔记——vector_3

文章目录 七、vector3. vector的模拟实现4. vector实现代码整合 未完待续 七、vector 3. vector的模拟实现 上篇文章我们讲解了非常 玄幻 的拷贝构造函数&#xff0c;同样的方法&#xff0c;我们也能用这种方法来实现 赋值重载函数 。 void swap(vector<T>& v) {s…

哈尔滨等保测评模拟题

《中华人民共和国网络安全法》中规定计算机信息系统安全保护等级共分为五级。&#xff08; t &#xff09;2019年&#xff0c;随着标准GB/T22239的更新&#xff0c;等级保护进入2.0时代。&#xff08; t&#xff09;某单位信息系统的等级定义为S2A3G2&#xff0c;根据取高原则…

自学Python爬虫js逆向(二)chrome浏览器开发者工具的使用

js逆向中很多工作需要使用浏览器中的开发者工具&#xff0c;所以这里以chrome为例&#xff0c;先把开发者工具的使用总结一下&#xff0c;后面用到的时候可以回来查询。 Google Chrome浏览器的开发者工具是前端开发者的利器&#xff0c;它不仅提供了丰富的功能用于开发、调试和…

实验九 Java 语言网络通信程序设计练习(课内实验)

一、实验目的 本次实验的主要目的是练习网络通信程序的设计方法&#xff0c;并掌握计算机网络基 础知识、Java语言网络通信程序类库的结构和使用方法。 二、实验要求 1. 认真阅读实验内容&#xff0c;完成实验内容所设的题目。 2. 能够应用多种编辑环境编写Java语言源程序…

如何使用DEEPL免费翻译PDF

如何使用DEEPL免费翻译PDF 安装DEEPL取消PDF限制 安装DEEPL 安装教程比较多&#xff0c;这里不重复。 把英文pdf拖进去&#xff0c;点翻译&#xff0c;在下面的框中有已经翻译完毕的文档。 但是存在两个问题 问题1&#xff1a;这些文档是加密的。 问题2&#xff1a;带有DeepL标…

去掉antd design vue组件库中表格的分割线

前言&#xff1a; 最近在公司完成UI设计稿的时候&#xff0c;需要使用antd design vue组件库中表格&#xff0c;但是UI设计稿中并不需要表格分割线&#xff0c;尝试了多种方式最后实现如下&#xff1a; <style lang"scss" scoped>::v-deep .ant-table-cell::…

Django中如何让页面之间建立关系

今天给大家讲解两种让页面建立联系的方式 一、重定向 二、表单提交 先看第一种方式&#xff0c;重定向 首先需要了解客户端发起请求的过程 1、客户端向服务端发起请求,比如请求地址是&#xff1a;http://127.0.0.1:8000/lili/submit/ 2、程序根据路由找到视图函数 3、执行视…