增加定时按钮
点击获取验证码后需要让按钮显示倒计时,然后倒计时结束后再次可点击。
添加TimberBtn类
1 |
|
添加实现
1 |
|
然后将注册界面获取按钮升级为TimerBtn
调整输入框错误提示
在RegisterDialog构造函数中删除原来的输入框editing信号和逻辑,添加editingFinished信号和处理逻辑。
1 | //day11 设定输入框输入后清空字符串 |
global.h中添加TipErr定义
1 | enum TipErr{ |
RegisterDialog声明中添加
1 | QMap<TipErr, QString> _tip_errs; |
_tip_errs用来缓存各个输入框输入完成后提示的错误,如果该输入框错误清除后就显示剩余的错误,每次只显示一条
实现添加错误和删除错误
1 | void ResetDialog::AddTipErr(TipErr te, QString tips) |
实现错误检测
1 | bool ResetDialog::checkUserValid() |
除此之外修改之前点击确认按钮的逻辑,改为检测所有条件成立后再发送请求
1 | void ResetDialog::on_sure_btn_clicked() |
隐藏和显示密码
我们在输入密码时希望能通过点击可见还是不可见,显示密码和隐藏密码,这里先添加图片放入资源中,然后在Register.ui中添加两个label,分别命名为pass_visible和confirm_visible, 用来占据位置。
因为我们要做的点击后图片要有状态切换,以及浮动显示不一样的效果等,所以我们重写ClickedLabel,继承自QLabel.
1 |
|
一个Label有六种状态,普通状态,普通的悬浮状态,普通的点击状态,选中状态,选中的悬浮状态,选中的点击状态。
当Label处于普通状态,被点击后,切换为选中状态,再次点击又切换为普通状态。
ClickLbState定义在global.h中,包含两种状态一个是普通状态,一个是选中状态。而Label中的六种状态就是基于这两种状态嵌套实现的。
1 | enum ClickLbState{ |
六种状态用qss写好,这样我们只需要根据鼠标事件切换不同的qss就可以实现样式变换。
1 | #pass_visible[state='unvisible']{ |
我们实现ClickedLabel功能
1 |
|
将label升级为ClickedLabel,然后在RegisterDialog的构造函数中添加label点击的响应函数
1 |
|
这样就实现了通过点击切换密码的显示和隐藏。
注册成功提示页面
注册成功后要切换到提示页面,所以在initHandlers函数内实现收到服务器注册回复的请求
1 | //注册注册用户回包逻辑 |
页面切换逻辑
1 | void RegisterDialog::ChangeTipPage() |
在RegisterDialog.ui中stackwidget的page2添加标签和返回按钮
在RegisterDialog构造函数中添加定时器回调
1 | // 创建定时器 |
除此之外在返回按钮的槽函数中停止定时器并发送切换登录的信号
1 | void RegisterDialog::on_return_btn_clicked() |
取消注册也发送切换登录信号
1 | void RegisterDialog::on_cancel_btn_clicked() |
界面跳转
回到mainwindow,构造函数简化,只做登录界面初始化
1 | MainWindow::MainWindow(QWidget *parent) : |
在点击注册按钮的槽函数中
1 | void MainWindow::SlotSwitchReg() |
切换登录界面
1 | //从注册界面返回登录界面 |
这样登录界面和注册界面的切换逻辑就写完了。