用QT写一个TCP通信助手(四、界面交互)

16 篇文章 9 订阅
14 篇文章 1 订阅

一、初始化

做一些界面上的初始化操作,以及TCP类的初始化设置
在这里插入图片描述

二、连接

2.1 模式切换

在这里插入图片描述

2.2 连接与断开

在这里插入图片描述

在这里插入图片描述

三、发送与接收

3.1 发送

在这里插入图片描述

3.2 接收

在这里插入图片描述

四、日志

在这里插入图片描述

五、运行

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

六、代码

完整的MainWindow代码如下,其他代码在对应的文章中
.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <qtcp.h>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_m_btnConnect_clicked();

    void on_m_btnSend_clicked();

    void on_m_btnClient_clicked();

    void on_m_btnServer_clicked();

    void on_m_btnDisConn_clicked();

    void ConnetOK();

    void Recv();

private:
    Ui::MainWindow *ui;
    int m_timer;
    virtual void timerEvent( QTimerEvent *event);
    QTCP m_TCP;
};

#endif // MAINWINDOW_H

.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimerEvent>
#include "qlogger.h"
#include <QDebug>

QString msg = nullptr;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    qDebug()<<"开始构造主界面";
    m_timer = this->startTimer(10);
    ui->setupUi(this);
    qDebug()<<"开始初始化界面";
    ui->m_btnClient->setChecked(true);
    m_TCP.SetMode(CLIENT_MODE);
    ui->m_editIpAddress->setText("127.0.0.1");
    ui->m_editPort->setText("6000");
    ui->m_editSend->setText("test");
    ui->m_groupSR->lower();
    qDebug()<<"主界面构造完成";
    connect(&m_TCP, &QTCP::Connected, this, &MainWindow::ConnetOK);
    qDebug()<<"开始监听连接状态";
}

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

void MainWindow::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == m_timer){
        QString logger = QLogger::GetInstance()->GetMsg();
        if(!logger.isEmpty() && msg != logger){
            msg = logger;
            ui->m_listLogger->addItem(logger);
            ui->m_listLogger->setCurrentRow(ui->m_listLogger->count()-1);
        }
    }
}

void MainWindow::on_m_btnConnect_clicked()
{
    if(m_TCP.IsConnect()){
        qWarning()<<"TCP 已经连接";
        return;
    }
    m_TCP.Connect(ui->m_editIpAddress->text(),ui->m_editPort->text().toInt());
}

void MainWindow::on_m_btnSend_clicked()
{
    if(!m_TCP.IsConnect()){
        qWarning()<<"请选择模式连接";
        return;
    }
    m_TCP.Send(ui->m_editSend->text());
}

void MainWindow::on_m_btnClient_clicked()
{
    if(m_TCP.IsConnect()){
        qWarning()<<"请先断开连接,再切换模式";
        return;
    }
    m_TCP.SetMode(CLIENT_MODE);
    ui->m_editIpAddress->setText("127.0.0.1");
    ui->m_editPort->setText("6000");
}

void MainWindow::on_m_btnServer_clicked()
{
    if(m_TCP.IsConnect()){
        qWarning()<<"请先断开连接,再切换模式";
        return;
    }
    m_TCP.SetMode(SERVER_MODE);
    ui->m_editIpAddress->setText("127.0.0.1");
    ui->m_editPort->setText("6666");
}

void MainWindow::on_m_btnDisConn_clicked()
{
    m_TCP.DisConn();
    ui->m_btnConnStatus->setStyleSheet("background-color:red");
    ui->m_btnConnStatus->setText("已断开");
}

void MainWindow::ConnetOK()
{
    ui->m_btnConnStatus->setStyleSheet("background-color:green");
    ui->m_btnConnStatus->setText("已连接");
    connect(m_TCP.GetSocket(), &QTcpSocket::disconnected, this, &MainWindow::on_m_btnDisConn_clicked);
    connect(m_TCP.GetSocket(), &QTcpSocket::readyRead, this, &MainWindow::Recv);
}

void MainWindow::Recv()
{
    QString data;
    if(!m_TCP.recv(data)){
       return;
    }
    ui->m_listRecv->addItem(data);
    ui->m_listRecv->setCurrentRow(ui->m_listRecv->count()-1);
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值