QT实现和服务器互传内容

一、设计的界面内容

二、.pron内加代码

QT       += network

三、widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTcpSocket>

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_pushButton_clicked();
    //自己创建连接服务器成功之后的函数
    void net_success();

    void on_pushButton_3_clicked();

    void on_pushButton_2_clicked();

    void recv_msg();

    void on_pushButton_4_clicked();

private:
    Ui::Widget *ui;
    //自己定义socket;
    QTcpSocket *socket;
};
#endif // WIDGET_H

四、widget.cpp

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

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

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


void Widget::on_pushButton_clicked()
{
    if(NULL == socket){
        socket = new QTcpSocket();
        socket->connectToHost(ui->lineEdit->text(),ui->lineEdit_2->text().toInt());
    }

    //将信号函数connected与net_success()绑定,一但连接成功就执行net_success()函数
    connect(socket,SIGNAL(connected()),this,SLOT(net_success()));//connected()表示连接成功返回的信号

}

void Widget::net_success()
{
    qDebug() << "net connectde";
    ui->pushButton->setEnabled(false);//a按钮失效
    //将信号函数readyRead与recv_msg()绑定,一有信号就执行recv_msg()函数
    connect(socket,SIGNAL(readyRead()) ,this,SLOT(recv_msg()));//readyRead()表示系统接收到信号后反馈的一个信号
}

void Widget::on_pushButton_3_clicked()
{
    this->close();//关闭界面
}

void Widget::on_pushButton_2_clicked()
{
    QString str = ui->textEdit->toPlainText();//将textEdit内容保存到str
    str += '\n';
    socket->write(str.toStdString().c_str(),64);//发送str内容
    ui->textEdit->clear();//清除发送端内容
    QString dst = "textEdit:\n\t";
    dst += str;
    ui->textEdit_2->append(dst);//将内容打印在textEdit_2中
}

//当有信号发送过来则运行recv_msg()函数
void Widget::recv_msg()
{
    char buf[64];
    socket->read(buf,64);//接收服务器发过来的内容保存到buf
    QString str = "textEdit_2:\n\t";
    str += QString(buf);
    ui->textEdit_2->append(str);//将接收到的内容打印到textEdit_2中
}


void Widget::on_pushButton_4_clicked()
{
    ui->textEdit_2->clear();//清除发送端内容
}

五、注意:

1、QT版本不同可能有些东西不是很兼容。

2、控件最好是自己添加,并转到槽,让系统自动生成函数。

posted @ 2021-07-21 18:14  西北小蚂蚁  阅读(237)  评论(0编辑  收藏  举报