Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 01

news/2024/12/16 5:34:31/

准备实现一个在线聊天工具,界面参考微信

环境是VS+Qt5.9.1+Mysql8.0,模式是C/S模式

所有通信基于服务器转发,最终实现登录、注册、私聊、群聊、文件传输、离线消息加载等功能

所有功能分模块一步步实现,本章先实现简单的登录和聊天界面

本章内容

  1. 创建服务器和客户端工程
  2. 设计登录和聊天窗口
  3. 实现窗口切换




第一步先创建两个新的vs工程

一个是服务器工程 MyChatToolServer,这个后面会用到,创建完先不管他
在这里插入图片描述
一个是客户端工程 MyChatToolClient

在这里插入图片描述
这里分别起了两个vs工程,也可以放在一个解决方案里,不过不适合新手调试

接下来,创建一个登陆界面

添加一个登陆界面的类,用Qt designer进行布局设计,基本界面如下

在这里插入图片描述
主要控件元素包括头像、ID、密码、登陆按钮、注册按钮和一个关闭按钮(右上角)

在头文件中声明相关槽函数

LoginWindow.h文件

#pragma once#include <QWidget>
#include "ui_LoginWindow.h"class LoginWindow : public QWidget
{Q_OBJECTpublic:LoginWindow(QWidget *parent = nullptr);~LoginWindow();signals:void signalLoginOK();	//登录成功信号private slots:void slotLoginBtnClicked();		//登录按钮点击事件void slotRegisterBtnClicked();	//注册按钮点击事件void slotCloseBtnClicked();		//关闭按钮点击事件void slotForgetPwdBtnClicked();	//忘记密码按钮点击事件private:void connectSlots();	//	连接信号槽private:Ui::LoginWindowClass ui;
};

并在cpp文件中实现(部分按钮功能的具体实现后期实现,先留出接口)

LoginWindow.cpp文件

#include "LoginWindow.h"LoginWindow::LoginWindow(QWidget *parent): QWidget(parent)
{ui.setupUi(this);connectSlots();
}LoginWindow::~LoginWindow()
{}//登录按钮点击事件
void LoginWindow::slotLoginBtnClicked()
{//获取用户输入//验证账户有效性//关闭登录界面(调用关闭函数)slotCloseBtnClicked();//发送成功的信号emit signalLoginOK();
}//注册按钮点击事件
void LoginWindow::slotRegisterBtnClicked()
{
}//关闭按钮点击事件
void LoginWindow::slotCloseBtnClicked()
{this->hide();
}//忘记密码按钮点击事件
void LoginWindow::slotForgetPwdBtnClicked()
{
}//	连接信号槽
void LoginWindow::connectSlots()
{connect(ui.btnLogin, &QPushButton::clicked, this, &LoginWindow::slotLoginBtnClicked, Qt::UniqueConnection);connect(ui.btnRegister, &QPushButton::clicked, this, &LoginWindow::slotRegisterBtnClicked, Qt::UniqueConnection);connect(ui.btnForgetPwd, &QPushButton::clicked, this, &LoginWindow::slotForgetPwdBtnClicked, Qt::UniqueConnection);connect(ui.btnClose, &QPushButton::clicked, this, &LoginWindow::slotCloseBtnClicked, Qt::UniqueConnection);
}

接着创建一个聊天窗口

界面控件和布局参考微信聊天界面,不一定要完全照搬,根据需要自己控制即可

在这里插入图片描述
聊天窗口暂时只有界面,没有实现相关功能

最后实现窗口的转换

在主控类中绑定登录类的信号 void signalLoginOK() ,跳过验证步骤,先实现页面的跳转

MyChatToolClient.h文件

#pragma once#include <QObject>
#include "LoginWindow.h"
#include "ChatWindow.h"class MyChatToolClient : public QObject
{Q_OBJECTpublic:MyChatToolClient(QObject *parent = nullptr);~MyChatToolClient();private slots:void slotLoginOk();	//登录成功槽函数private:LoginWindow* m_loginWin = nullptr;ChatWindow* m_chatWin = nullptr;
};

MyChatToolClient.cpp文件

#include "MyChatToolClient.h"MyChatToolClient::MyChatToolClient(QObject *parent): QObject(parent)
{m_loginWin = new LoginWindow;connect(m_loginWin, &LoginWindow::signalLoginOK, this, &MyChatToolClient::slotLoginOk);m_loginWin->show();
}MyChatToolClient::~MyChatToolClient()
{}//登录成功槽函数
void MyChatToolClient::slotLoginOk()
{//关闭登录窗口并释放空间m_loginWin->close();delete m_loginWin;m_loginWin = nullptr;//新建并打开聊天窗口m_chatWin = new ChatWindow;m_chatWin->show();
}

main.cpp

#include <QtWidgets/QApplication>
#include "MyChatToolClient.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);MyChatToolClient myChatTool;return a.exec();
}

点击登录按钮后打开聊天窗口并关闭登录窗口,实现功能窗口的切换,后续还要添加登录验证。

在这里插入图片描述





下一章:Qt实现在线聊天工具(服务器、客户端)仿微信V1_ 02


http://www.ppmy.cn/news/594519.html

相关文章

ChatGLM(国内版的chatGPT)

Git链接&#xff1a; GitHub - THUDM/ChatGLM-6B: ChatGLM-6B&#xff1a;开源双语对话语言模型 | An Open Bilingual Dialogue Language Model 介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具…

即时通讯,1 天快速集成 支持单群聊、聊天室、系统通知等通信能力,安全可靠、 全球互通

即时通讯&#xff0c;1 天快速集成 支持单群聊、聊天室、系统通知等通信能力&#xff0c;安全可靠、 全球互通。## 标题 Android RongIM.init(this, ‘AppKey’, false); RongIM.connect(“Token”, new RongIMClient.ConnectCallback() { Override public void onTokenI…

【QMT】给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码)

给QMT量化交易软件安装和调用第三方库&#xff08;举例通达信pytdx&#xff0c;MyTT&#xff0c;含代码&#xff09; 一、安装QMT二、给QMT安装python三、给QMT的python环境安装第三方库1.准备python虚拟环境2.安装第三方库到指定目录 四、在QMT里调用第三方库&#xff08;代码…

网页版QQ、MSN等等聊天工具web版大全

原文地址为&#xff1a; 网页版QQ、MSN等等聊天工具web版大全 首发地址 http://www.178good.cn/178/Html/?209.html 相关网址&#xff1a;聊天工具大全 http://www.178good.cn/178good/soft/liaotian.htmlMM是个十足的聊天迷&#xff0c;走到哪里聊到哪里。不光酷爱聊天&…

Linux文件目录结构

使用 Linux 时&#xff0c;通过命令行输入 ls -l / 可以看到&#xff0c;在 Linux 根目录&#xff08;/&#xff09;下包含很多的子目录&#xff08;称为一级目录&#xff09;&#xff0c;例如 bin、boot、dev 等。同时&#xff0c;各一级目录下还含有很多子目录&#xff08;称…

从零开始理解Linux中断架构(9)---异常执行流与调度

对于当前线程来说,要交出CPU的控制有如下几个常见的场景: (1)当前线程为内核线程,主动调用(schedule)交出控制权 (2)当前线程为内核线程,中断产生后,当前线程保持现状 (3)当前线程为内核线程,中断产生后,当前线程被占先调度。 (4)当前线程为用户线程,主动发…

iOS 使用 cartool 获取App内图片资源文件教程

第一步&#xff1a;下载 IPA 资源包 图片资源是存在IPA包中&#xff0c;第一步下载 IPA 包以斗鱼为例可以利用 iTunes、PP助手、iTools 任何一个软件 IPA 包&#xff08;由于 iTunes 连接较慢&#xff0c;所以建议选择后面两种方式&#xff09;以 PP助手为例 第二步&…

如何自动切换 iTunes MiniPlayer?

好久不分享 Keyboard Maestro键盘增强工具使用技巧了&#xff0c;今天就分享一下如何利用 Keyboard Maestro 实现 iTunes MiniPlayer 的自动切换的小技巧&#xff0c;这个功能完全切中我的需求啊&#xff0c;当我需要在后台听歌时完全不需要 iTunes 那臃肿的窗口占据我的屏幕&a…