基于QT框架的一个简单的聊天软件 (Tcp/ip版本)

本文详细介绍使用Qt开发简易聊天软件的过程,包括服务器与客户端UI设计、网络编程接口应用及代码实现,适合初学者快速入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt开发简单聊天软件

  • 先来看下具体效果
    很简单的一个界面 都能看懂 不多做解释

  • 大家先创建两个Qt QApplication文件 在同一个项目或者分块创建都可以
    我的两个类名分别是是Server Client

  • 其实很简单 就是用到Qt内部封装好的网络编程接口

  • 这里重点要的要提一下 要用到两个头文件

  • #include 监听

  • #include 通信
    (特别要注意要在 .pro文件里添加 network模块不然不识别这两个头文件)
    很简单不解释

  • 接下来先把ui布局好

  • 下面这个是服务器Server的ui界面
    (注意我画红线的地方 折现ui控件名要在后面代码里用到)

这是服务器的ui界面 注意红线的地方

  • 接下来是客户端ui界面
    (注意我画红线的地方 折现ui控件名要在后面代码里用到和上面一样不多解释了)
    在这里插入图片描述
    !!!这个客户端的ui我是从服务器复制下来的 大家下面看代码仔细点别犯迷糊

  • 激动人心的时候到了 上代码了

#.pro文件这是
#这个很重要没这个会死人的  
#按我这个配置别少配置模块 少了程序没法运行
#也别多配置 和个2货是的
QT       += core gui network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Tcp
TEMPLATE = app

SOURCES += \
        main.cpp \
        server.cpp \
    client.cpp

HEADERS += \
        server.h \
    client.h

FORMS += \
        server.ui \
    client.ui
CONFIG += c++11
//main.cpp
//程序的入口和出口 但凡学过两天c的都懂 不懂的别看了 去学c基础

#include "server.h"
#include"client.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Server w;
    w.setWindowTitle("Server");
    w.show();

    Client c;
    c.setWindowTitle("Client");
    c.show();

    return a.exec();
}

//server.h
//服务器头文件

#ifndef SERVER_H
#define SERVER_H

```cpp


```cpp

#include <QWidget>
//添加模块network
#include<QTcpServer>
#include<QTcpSocket>
namespace Ui {
class Server;
}

class Server : public QWidget
{
    Q_OBJECT

public:
    explicit Server(QWidget *parent = 0);
    ~Server();

private:
    Ui::Server *ui;
    QTcpServer *server;  //监听套接字
    QTcpSocket *conn;  //通信套接字
};

#endif // SERVER_H

//server.cpp
//服务器源文件

#include "server.h"
#include "ui_server.h"

//添加模块network
#include<QTcpServer> //这两头文件 在server.h就添加过了 这有点花蛇填足了
#include<QTcpSocket>

Server::Server(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Server)
{
    ui->setupUi(this);

    //初始化ui
    ui->SIp->setText("127.0.0.1");
    ui->SPort->setText("9998");

    server = new QTcpServer(this);
    //监听
    server->listen(QHostAddress(ui->SIp->text()),ui->SPort->text().toInt());

    //新的连接
    connect(server,&QTcpServer::newConnection,this,[=]()
    {
       //接收客户端的套接字
       conn = server->nextPendingConnection();

       ui->recorb->append("有新的连接...");

       //因为客户端每连接一个 就会初始化conn所以放到里面 确保不被重新初始化
       connect(conn,&QTcpSocket::readyRead,this,[=]()
       {
           //接受数据
           QByteArray array = conn->readAll();
           ui->recorb->append(array);
       });
    });


    //发送
    connect(ui->send,&QPushButton::clicked,this,[=]()
    {
       conn->write(ui->msg->toPlainText().toUtf8());
       ui->recorb->append("Server__>>:"+ ui->msg->toPlainText().toUtf8());
       ui->msg->clear();
    });


}

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

//client.h
//客户端头文件

#ifndef CLIENT_H
#define CLIENT_H

#include <QWidget>
#include<QTcpSocket>
namespace Ui {
class Client;
}

class Client : public QWidget
{
    Q_OBJECT

public:
    explicit Client(QWidget *parent = 0);
    ~Client();

private:
    Ui::Client *ui;
    QTcpSocket *client;
};

#endif // CLIENT_H

//client.cpp
//客户端源文件
#include "client.h"
#include "ui_client.h"
#include<QTcpSocket>
#include<QHostAddress>
Client::Client(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Client)
{
    ui->setupUi(this);
    //初始化ui
    ui->Sip->setText("127.0.0.1");
    ui->Sport->setText("9998");
    //初始化
    client = new QTcpSocket(this);
    //连接服务器
    client->connectToHost(QHostAddress(ui->Sip->text()),ui->Sport->text().toInt());

    //接受数据
    connect(client,&QTcpSocket::readyRead,this,[=](){

       QByteArray array = client->readAll();
       ui->recorb->append(array);
    });
    //发送数据
    connect(ui->send,&QPushButton::clicked,this,[=]()
    {
       client->write(ui->msg->toPlainText().toUtf8());
       ui->recorb->append("Client__>>:"+ui->msg->toPlainText().toUtf8());
       ui->msg->clear();
    });

}

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


- 制作不容易 您都看到这了 您的每一个点赞和关注都是封禹最大的动力 让我持续为你分享技术 加油!!!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值