准备实现一个在线聊天工具,界面参考微信
环境是VS+Qt5.9.1+Mysql8.0,模式是C/S模式
所有通信基于服务器转发,最终实现登录、注册、私聊、群聊、文件传输、离线消息加载等功能
所有功能分模块一步步实现,本章先实现简单的登录和聊天界面
本章内容
- 创建服务器和客户端工程
- 设计登录和聊天窗口
- 实现窗口切换
第一步先创建两个新的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