用Qt creator写一个多人聊天室,人数最大限制为20人(这里看自己需求)。实现连接断开,聊天及查看历史记录功能
客户端:
.h头文件
#ifndef DIALOG_H
#define DIALOG_H
#include <QtWidgets>
#include <QDebug>
#include <QDateTime>
#include <QTcpSocket>//网络连接类
#include <QTextStream>
#include <QSqlDatabase>
#include <QSqlQuery> // 数据库操作类
#include <QSqlError> // 数据库错误信息类
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private:
Ui::Dialog *ui;
QTcpSocket* client;//客户端连接对象
void printMsg(QString); // 输出内容到公屏
QSqlDatabase db; // 栈内存的数据库连接对象
void connect2DB(); // 连接到数据库
void createTable(); // 创建表
void insertData(QString,QString); // 插入数据
QString get_time();
private slots:
void btnConnClickedSlot(); // 点击连接按钮的槽函数
void btnSendClickedSlot(); // 点击发送按钮的槽函数
void connectedSlot();//连接成功的槽函数
void disconnectedSlot();//断开连接的槽函数
void readReadSlot(); // 接收数据的槽函数
void btnsClickedSlot();//按钮点击的槽函数
};
#endif // DIALOG_H
.cpp
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
setWindowFlags(Qt::WindowStaysOnTopHint);
connect(ui->pushButtonConn,SIGNAL(clicked()),
this,SLOT(btnConnClickedSlot()));
connect(ui->pushButtonSend,SIGNAL(clicked()),
this,SLOT(btnSendClickedSlot()));
//创建客户端对象
client = new QTcpSocket(this);
// 建立网络连接检测的信号槽
connect(client,SIGNAL(connected()),
this,SLOT(connectedSlot()));
connect(client,SIGNAL(disconnected()),
this,SLOT(disconnectedSlot()));
// 接收消息的信号槽
connect(client,SIGNAL(readyRead()),
this,SLOT(readReadSlot()));
connect2DB();
connect(ui->pushButton,SIGNAL(clicked()),
this,SLOT(btnsClickedSlot()));
}
Dialog::~Dialog()
{
disconnect(client,SIGNAL(disconnected()),
this,SLOT(disconnectedSlot()));
// 如果还在连接
if