qt linux 聊天室,Qt网络聊天室客户端

原创 DeRoy 2020-08-15

收录于话题

#QT项目实战

11个

点击蓝字关注我们

基于Qt网络编程客户端

QTcpSocketQTcpSocket 类提供一个TCP套接字TCP是一个面向连接,可靠的的通信协议,非常适合于连续不断的数据传递

QTcpSocket 是QAbstractSocket类非常方便的一个子类,让你创建一个TCP连接和数据流交流。

QTcpSocket 信号:readyRead()//有数据发送过来时触发该信号

disconnected()//socket->close()触发disconnected()信号,客户端服务端都触发

配置

pro文件添加QT += network

Public

connectToHost()连接服务器,参数为服务器地址和端口号

waitForConnected设置等待连接,设置超时时间QString ipAddressStr = ui->lineEditAddress->text();

quint16 port = ui->lineEditPort->text().toInt();

socket->connectToHost(ipAddressStr, port);

if(socket->waitForConnected(3000))

{

//连接成功

qDebug() << "connect secess";

}

else

{

qDebug() << socket->errorString();

return;

}

SIGNAL

disconnected()

Socket close信号,当socket执行close函数之后出发信号connect(socket, SIGNAL(disconnected()),this,SLOT(disconnectedSlot()));//客户端断开连接

readyRead()当服务端有数据发送过来的时候触发该信号connect(socket, SIGNAL(readyRead()),this, SLOT(readyReadSlot())); //接收消息QByteArray dataBa = socket->readAll();

UI设计

客户端UI设计

TcpClient项目训练

widget.h#ifndef WIDGET_H

#define WIDGET_H

#include

#include

#include

#include

namespace Ui {

class Widget;

}

class Widget : public QWidget

{

Q_OBJECT

public:

explicit Widget(QWidget *parent = nullptr);

~Widget();

private slots:

void on_pushButtonConnect_clicked();

void disconnectedSlot();

void readyReadSlot();

void on_pushButtonSend_clicked();

private:

Ui::Widget *ui;

QTcpSocket *socket;

bool socketState;

};

#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 = new QTcpSocket;

socketState = false;

connect(socket, SIGNAL(disconnected()),this, SLOT(disconnectedSlot()));     //客户端断开连接

connect(socket, SIGNAL(readyRead()),this, SLOT(readyReadSlot()));           //接收消息

}

Widget::~Widget()

{

delete ui;

}

void Widget::on_pushButtonConnect_clicked(){

QString ipAddressStr = ui->lineEditAddress->text();

quint16 port = ui->lineEditPort->text().toInt();

if(!socketState)

{

socket->connectToHost(ipAddressStr, port);

if(socket->waitForConnected(3000))

{

qDebug() << "Connect2Server OK";

ui->pushButtonConnect->setText("断开连接");

socketState = true;

}

else

{

qDebug() << socket->errorString();

return;

}

}

else

{

socket->close();

ui->pushButtonConnect->setText("连接");

socketState = false;

}

}

void Widget::disconnectedSlot(){

qDebug()<

}

void Widget::readyReadSlot(){

QByteArray dataBa = socket->readAll();

QString str = QString(QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss ddd")) +

":Recv\n" + str.fromLocal8Bit(dataBa.data());    //本地GBK转Unicode 解决乱码

ui->textBrowserRecv->append(QString(str));          //送显示

}

void Widget::on_pushButtonSend_clicked(){

QString dataStr = ui->textEditSend->toPlainText();

//QByteArray data = dataStr.toUtf8();        //发送UTF编码数据

QByteArray data = dataStr.toLocal8Bit();     //发送本地字符(GBK)

if(socket->isOpen() && socket->isValid())

{

socket->write(data);

}

QString str = QString(QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss ddd")) +

":Recv\n" + str.fromLocal8Bit(data.data());    //本地GBK转Unicode 解决乱码

ui->textBrowserRecv->append(QString(str));          //送显示

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值