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

一、网络调试助手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 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript js写九九乘法表(两种方法)

方法一&#xff1a; 观察规律&#xff1a; 第一个数每行都是自增1。 我们发下第二个数都是从1开始&#xff0c;依次递增1&#xff0c;永远不大于前面的数。 前面数字每自增一次&#xff0c;后面数字自增一轮。 我们可以用双重for循环&#xff0c;外层初始值设为i&#xff0…

【C++】对文章分词,并对词频用不同排序方法排序,比较各排序算法效率

文章分词 1&#xff0e;问题描述2&#xff0e;需求分析3&#xff0e;概要设计3.1 主程序流程3.2 函数调用关系 4&#xff0e;主函数实现4.1 main.h4.2 main.cpp 5. 函数实现5.1 processDic函数5.2 forwardMax函数5.3 countWordFreq函数5.4 quickResult函数5.5 其它排序算法效率…

【链表】:链表的带环问题

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;数据结构 &#x1f337;追光的人&#xff0c;终会万丈光芒 前言&#xff1a; 链表的带环问题在链表中是一类比较难的问题&#xff0c;它对我们的思维有一个比较高的要求&#xff0c;但是这一类…

十二、泛型

这里写自定义目录标题 一、什么是泛型二、为什么需要泛型&#xff1f;三、自定义泛型结构1、泛型类2、泛型方法 四、泛型在继承上的体现五、通配符的使用1、注意点2、有限制的通配符 一、什么是泛型 泛型就是定义类、接口时通过一个标识表示类中某个属性的类型 、方法的返回值…

C#实现简单音乐文件解析播放——Windows程序设计作业2

1. 作业内容 编写一个C#程序&#xff0c;要求实现常见音乐文件的播放功能&#xff0c;具体要求如下&#xff1a;     1). 播放MP3文件&#xff1a; 程序应能够读取MP3文件&#xff0c;并播放其中的音频。     2). 播放OGG文件&#xff1a; 应能够播放ogg文件。     …

学习3:scrapy请求对象、模拟登录、POST请求、管道的使用、crawlspider爬虫类

请求对象 请求对象参数 scrapy.Request(url[],callback,method"GET",headers,body,cookies,meta,dont_filterFalse)callback 表示当前的url响应交给那个函数去处理method 指定请求方式headers 接受一个字典&#xff0c;其中不包括cookiesbody 接收json字符串&#…

OpenCV的周期性噪声去除滤波器(70)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV如何通过梯度结构张量进行各向异性图像分割(69) 下一篇 :OpenCV如何为我们的应用程序添加跟踪栏(71) 目录 目标 理论 如何消除傅里叶域中的周期性噪声&#xff1f; 源代码 解释 结果 目…

IDEA--debug

1. 单点调试的三个级别 Step into&#xff1a;在单步执行时&#xff0c;遇到子函数就进入并且继续单步执行。Step over&#xff1a;在单步执行时&#xff0c;在函数内遇到子函数时不会进入子函数内单步执行&#xff0c;而是将子函数整个执行完再停止&#xff0c;也就是把子函数…

用树莓派2B当web服务器

树莓派2&#xff0c;卡片大小&#xff0c;arm 32位cpu&#xff0c;512G内存。我找了一下购买记录&#xff0c;2013年12月15日买的。带网线接头。属于树莓派2B。以前下载的操作系统还在。是2014年的操作系统&#xff0c;文件名是&#xff1a;2014-09-09-wheezy-raspbian_shumeip…

C语言之整形提升和算术转换

目录 前言 一、整形提升 二、算术转换 总结 前言 本文主要介绍C语言中的整形提升和算术转换的概念和意义&#xff0c;以及例题帮助理解&#xff0c;了解之后&#xff0c;我们就能知道在C语言中&#xff0c;字符型变量如何计算以及如果变量的类型、字节大小不一致的情况下&am…

前端工程化06-JavaScript模块化CommonJS规范ES Module

7、JavaScript模块化 在js开发中&#xff0c;他并没有拆分的概念&#xff0c;并不像java一样他可以拆分很多的包&#xff0c;很多的类&#xff0c;像搭积木一样完成一个大型项目的开发&#xff0c;所以js在前期的时候并不适合大型后端的项目开发&#xff0c;但是这些问题在后来…

Android 10.0 Launcher3 app页面调整workspace边距app行距变小功能实现

1.前言 在10.0的系统rom定制化开发中,在launcher3的一些开发定制功能中,在对于大分辨率比如1600*2560的设备进行开发的时候, 会在竖屏的时候,在默认7*4的布局的时候,显得行距有点宽,这样就需要调整整个CellLayout的上下左右边距,然后就 会显得行距会小一点,接下来具体…

ASP.NET网上书店

摘要 本设计尝试用ASP.NET在网络上架构一个电子书城&#xff0c;以使每一位顾客不用出门在家里就能够通过上网来轻松购书。本文从理论和实践两个角度出发&#xff0c;对一个具有数据挖掘功能电子书城进行设计与实现分析。论文首先较为详尽地介绍了面向对象分析与设计的有关概念…

基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的房屋租赁管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

图中有几个三角形

让我们先把三角形进行分类&#xff1a;1块组成的三角形、2块组成的三角形、依此类推。 1块组成的三角形有4个&#xff1a; 2块组成的三角形有&#xff1a;12,13,14,23,24,34.其中&#xff0c;14&#xff0c;23构不成三角形. 3块组成的三角形有&#xff1a;123,124,134,234。但…

贪心算法(活动选择、分数背包问题)

一、贪心算法 贪心算法是指&#xff1a;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择&#xff0c;而不从整体最优考虑&#xff0c;做出的仅是在某种意义上的局部最优解。 …

流畅的Python阅读笔记

五一快乐的时光总是飞快了&#xff0c;不知多久没有拿起键盘写文章了&#xff0c;最近公司有Python的需求&#xff0c;想着复习下Python吧&#xff0c;然后就买了本Python的书籍 书名&#xff1a; 《流畅的Python》 下面是整理的一个阅读笔记&#xff0c;大家自行查阅&#xf…

Python 全栈系列241 GFGo Lite迭代

说明 随着整个算网开发逐渐深入&#xff0c;各个组件、微服务的数量、深度在不断增加。由于算网是个人项目&#xff0c;我一直按照MVP(Minimum Viable Product )的原则在推进。由于最初的时候对架构、算法和业务的理解并没有那么深刻&#xff0c;所以MVP的内容还是在不断变化&…

选择深度学习框架:TensorFlow 2 vs PyTorch

TensorFlow 2 vs PyTorch 选择深度学习框架&#xff1a;TensorFlow 2 vs PyTorchTensorFlow 2概述TensorFlow 2的优点TensorFlow 2的缺点 PyTorch概述PyTorch的优点PyTorch的缺点 选择建议对于选择困难症的人&#xff0c;我给你们的答案——PyTorch选择理由&#xff1a;结论&am…

数据结构(C):玩转链表

&#x1f37a;0.前言 言C之言&#xff0c;聊C之识&#xff0c;以C会友&#xff0c;共向远方。各位博友的各位你们好啊&#xff0c;这里是持续分享数据结构知识的小赵同学&#xff0c;今天要分享的数据结构知识是链表&#xff0c;在这一章&#xff0c;小赵将会向大家展开聊聊链表…