QT—网络调试助手客户端
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QTcpSocket>
#include <QWidget>
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_btnconnect_clicked();
void my_ReadData_from_server();
void on_btnSend_clicked();
void on_btndisc_clicked();
void onconnected();
void onError(QAbstractSocket::SocketError);
void onTimerout();
private:
Ui::Widget *ui;
QTcpSocket *client;
QTimer *timer;
void mInserTextByColor(Qt::GlobalColor color,QString str);
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setLayout(ui->verticalLayout);
client=new QTcpSocket();
ui->btndisc->setEnabled(false);
ui->btnSend->setEnabled(false);
connect(client,SIGNAL(readyRead()),this,SLOT(my_ReadData_from_server()));
}
Widget::~Widget()
{
delete ui;
}
//连接
void Widget::on_btnconnect_clicked()
{
// virtual void
// connectToHost(const QString &hostName, quint16 port, QIODevice::OpenMode openMode = ReadWrite, QAbstractSocket::NetworkLayerProtocol protocol = AnyIPProtocol)
timer=new QTimer(this);
timer->setSingleShot(true);
timer->setInterval(5000);
client->connectToHost(ui->lineEditIP->text(),ui->lineEditport->text().toInt());
connect(timer,SIGNAL(timeout()),this,SLOT(onTimerout()));
connect(client,SIGNAL(connected()),this,SLOT(onconnected()));
connect(client,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onError(QAbstractSocket::SocketError)));
// connect(client,SIGNAL(error(QAbstractSocket::SocketError)),
//this,SLOT(onError(QAbstractSocket::SocketError)));
this->setEnabled(false);
timer->start();
}
//接收服务端数据
void Widget::my_ReadData_from_server()
{
mInserTextByColor(Qt::black,client->readAll());
ui->textEditRev->moveCursor(QTextCursor::End);
ui->textEditRev->ensureCursorVisible();
}
//发送数据
void Widget::on_btnSend_clicked()
{
QByteArray sendData=ui->textEditSend->toPlainText().toUtf8();
client->write(sendData);
mInserTextByColor(Qt::red,ui->textEditSend->toPlainText());
}
//断开
void Widget::on_btndisc_clicked()
{
timer->stop();
client->disconnectFromHost();
client->close();
ui->textEditRev->insertPlainText("终止连接!");
ui->lineEditIP->setEnabled(true);
ui->lineEditport->setEnabled(true);
ui->btnconnect->setEnabled(true);
ui->btndisc->setEnabled(false);
ui->btnSend->setEnabled(false);
}
void Widget::onconnected()
{
this->setEnabled(true);
ui->textEditRev->insertPlainText("连接成功");
ui->lineEditIP->setEnabled(false);
ui->lineEditport->setEnabled(false);
ui->btnconnect->setEnabled(false);
ui->btndisc->setEnabled(true);
ui->btnSend->setEnabled(true);
}
void Widget::onError(QAbstractSocket::SocketError error)
{
this->setEnabled(true);
qDebug()<<"连接失败:"<<error;
ui->textEditRev->insertPlainText("连接出问题啦!"+client->errorString());
on_btndisc_clicked();
}
void Widget::onTimerout()
{
ui->textEditRev->insertPlainText("连接超时");
client->abort();
this->setEnabled(true);
}
void Widget::mInserTextByColor(Qt::GlobalColor color, QString str)
{
QTextCursor cursor=ui->textEditRev->textCursor();
QTextCharFormat format;
format.setForeground(QBrush(QColor(color)));
cursor.setCharFormat(format);
cursor.insertText(str);
}