当前位置: 首页 > article >正文

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

上一篇设计了登录和聊天窗口,并实现了窗口切换,本章将继续实现其他模块

本章内容

  1. 完善登录验证
  2. 实现自定义窗口的拖动效果

完善登录验证

对登录的输入框进行输入限定,这里我限制登录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;
}

关于这里可以 参考我的另一篇博客,自定窗口的拖动

具体的实现根据自己的需要进行调整,不用照搬


http://www.kler.cn/a/13828.html

相关文章:

  • 【C++学习笔记】字符串、向量和数组
  • flac格式如何转mp3,3招帮你搞定
  • springboot+vue准妈妈孕期交流平台(源码+文档)
  • shell脚本中用法_遇到的坑
  • Windows 服务监控工具
  • 第一个机器学习应用:鸢尾花分类
  • 哪款无线洗地机最好用?好用的无线洗地机分享
  • 无线洗地机哪款性价比高?高性价比的洗地机分享
  • OSCP-Exfiltrated(Subrion、exiftool提权)
  • 功能安全ISO26262 道路车辆 功能安全审核及评估方法第3部分:软件层面
  • springcloudfeign原理和流程
  • OpenAI-ChatGPT最新官方接口《从0到1生产最佳实例》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(十一)(附源码)
  • 设备树常用of操作函数
  • UE4: Niagara系统实现雨天效果,并跟随人物移动
  • hadoop之MapReduce框架原理
  • Java基于POI动态合并单元格
  • 大语言模型-中文Langchain
  • ElasticSearch索引文档写入和近实时搜索
  • 86页2023年新型智慧城市顶层设计规划解决方案(ppt可编辑)
  • 火车站闸机web3d数字展示平台全方位动态呈现设备细节