您现在的位置是:首页 >其他 >Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 02网站首页其他

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

Just_like_fire 2023-06-11 00:00:03
简介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;
}

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

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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。