Qt开发简单聊天软件
-
先来看下具体效果
-
大家先创建两个Qt QApplication文件 在同一个项目或者分块创建都可以
我的两个类名分别是是Server Client -
其实很简单 就是用到Qt内部封装好的网络编程接口
-
这里重点要的要提一下 要用到两个头文件
-
#include 监听
-
#include 通信
(特别要注意要在 .pro文件里添加 network模块不然不识别这两个头文件)
-
接下来先把ui布局好
-
下面这个是服务器Server的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;
}
- 制作不容易 您都看到这了 您的每一个点赞和关注都是封禹最大的动力 让我持续为你分享技术 加油!!!