一、初始化
做一些界面上的初始化操作,以及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);
}