您现在的位置是:首页 >其他 >Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 02网站首页其他
Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 02
简介Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 02
上一篇设计了登录和聊天窗口,并实现了窗口切换,本章将继续实现其他模块
本章内容
- 完善登录验证
- 实现自定义窗口的拖动效果
完善登录验证
对登录的输入框进行输入限定,这里我限制登录id为6位纯数字组合,密码长度不超过16位
设置代码我放在了构造函数里
LoginWindow::LoginWindow(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connectSlots();
//设置输入框的限制
QRegExp rx("[1-9][0-9]{5}"); //不超过6位的纯数字id
QRegExpValidator *pReg = new QRegExpValidator(rx, this);
ui.lineEditUserID->setValidator(pReg);
ui.lineEditPassword->setMaxLength(16); //设置密码最大长度16
}
在登录按钮点击后,校验ID长度是否合法,不合法则进行提示
//登录按钮点击事件
void LoginWindow::slotLoginBtnClicked()
{
//获取用户输入
QString strID = ui.lineEditUserID->text();
if (strID.size() != 6)
{
QToolTip::showText(QCursor::pos(), QString::fromLocal8Bit("ID输入有误!"));
return;
}
//验证账户有效性
//关闭登录界面(调用关闭函数)
slotCloseBtnClicked();
//发送成功的信号
emit signalLoginOK();
}
相关头文件
#include <QRegExp>
#include <QToolTip>
实现自定义窗口的拖动效果
新建一个窗口移动的类 MoveWindow,继承QWidget并重写鼠标移动事件
大致代码
class MoveWindow : public QWidget
{
Q_OBJECT
public:
explicit MoveWindow(QWidget *parent = Q_NULLPTR);
protected:
/**
* @brief 鼠标按下,准备拖动窗体
* @param event
*/
void mousePressEvent(QMouseEvent *event);
/**
* @brief 鼠标移动,处理窗体拖动
* @param event
*/
void mouseMoveEvent(QMouseEvent *event);
/**
* @brief 释放鼠标
* @param event
*/
void mouseReleaseEvent(QMouseEvent *event);
/**
* @brief 获取可拖动控件,必须由子类指定
* @return
*/
virtual QWidget*getDragnWidget() = 0;
/**
* @brief 判断鼠标点击的位置是否进入可拖动区域
* @param widget 可拖动控件位置
* @param point 鼠标点击位置
* @return
*/
bool isPointInDragnWidget(const QWidget*widget, const QPoint &point);
/**
* @brief 标志是否移动窗体
*/
bool isMove;
/**
* @brief 鼠标按下去的点
*/
QPoint pressedPoint;
};
修改LoginWindow和ChatWindow父类为MoveWindow
.h
class LoginWindow : public MoveWindow
{
Q_OBJECT
public:
LoginWindow(QWidget *parent = nullptr);
~LoginWindow();
.cpp
LoginWindow::LoginWindow(QWidget *parent)
: MoveWindow(parent)
{
ui.setupUi(this);
同时实现基类中的虚函数 getDragnWidget()
protected:
QWidget* getDragnWidget();
QWidget * LoginWindow::getDragnWidget()
{
return this;
}
关于这里可以 参考我的另一篇博客,自定窗口的拖动
具体的实现根据自己的需要进行调整,不用照搬
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。