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)); ? ? ? ? ?//送顯示
}
總結
以上是生活随笔為你收集整理的qt linux 聊天室,Qt网络聊天室客户端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux关闭开发者模式的命今,Cent
- 下一篇: linux桌面添加软件快捷方式,如何在