完善注册类界面
先在注册类构造函数里添加lineEdit的模式为密码模式
1 | ui->lineEdit_Passwd->setEchoMode(QLineEdit::Password); |
我们在注册界面的ui里添加一个widget,widget内部包含一个tip居中显示,用来提示错误。设置label的显示为文字居中。
我们在qss里添加err_tip样式,根据不同的状态做字体显示
1 | #err_tip[state='normal']{ |
接下来项目中添加global.h和global.cpp文件,global.h声明repolish函数,global.cpp用来定义这个函数。
.h中的声明
1 |
|
.cpp中的定义
1 |
|
在Register的构造函数中添加样式设置。
1 | ui->err_tip->setProperty("state","normal"); |
接下来实现获取验证码的逻辑,ui里关联get_code按钮的槽事件,并实现槽函数
1 | void RegisterDialog::on_get_code_clicked() |
在RegisterDialog中添加showTip函数
1 | void RegisterDialog::showTip(QString str) |
好了,这样就完成了。测试提示功能正确,下面要实现判断邮箱正确后发送http请求。
单例类封装
网络请求类要做成一个单例类,这样方便在任何需要发送http请求的时候调用,我们先实现单例类,添加singleton.h实现如下
1 |
|
http管理类
http管理类主要用来管理http发送接收等请求得,我们需要在pro中添加网络库
1 | QT += core gui network |
在pro中添加C++类,命名为HttpMgr,然后头文件如下
1 |
|
我们先实现PostHttpReq请求的函数,也就是发送http的post请求, 发送请求要用到请求的url,请求的数据(json或者protobuf序列化),以及请求的id,以及哪个模块发出的请求mod,那么一个请求接口应该是这样的
1 | void PostHttpReq(QUrl url, QJsonObject json, ReqId req_id, Modules mod); |
我们去global.h定义ReqId枚举类型
1 | enum ReqId{ |
在global.h定义ErrorCodes
1 | enum ErrorCodes{ |
在global.h中定义模块
1 | enum Modules{ |
还需要修改下要发送的信号,在HttpMgr的头文件里,让他携带参数
1 | void sig_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod); |
我们实现PostHttpReq
1 | void HttpMgr::PostHttpReq(QUrl url, QJsonObject json, ReqId req_id, Modules mod) |
加下来HttpMgr内实现一个slot_http_finish的槽函数用来接收sig_http_finish信号。
1 | void HttpMgr::slot_http_finish(ReqId id, QString res, ErrorCodes err, Modules mod) |
我们在HttpMgr.h中添加信号sig_reg_mod_finish,
1 | class HttpMgr:public QObject, public Singleton<HttpMgr>, |
并且在cpp文件中连接slot_http_finish和sig_http_finish.
1 | HttpMgr::HttpMgr() |
我们在注册界面连接sig_reg_mod_finish信号
1 | RegisterDialog::RegisterDialog(QWidget *parent) : |
接下俩实现slot_reg_mod_finish函数
1 | void RegisterDialog::slot_reg_mod_finish(ReqId id, QString res, ErrorCodes err) |
showTip逻辑稍作修改,增加bool类型参数
1 | void RegisterDialog::showTip(QString str, bool b_ok) |
注册消息处理
我们需要对RegisterDialog注册消息处理,头文件声明
1 | QMap<ReqId, std::function<void(const QJsonObject&)>> _handlers; |
在RegisterDialog中添加注册消息处理的声明和定义
1 | void RegisterDialog::initHttpHandlers() |
回到slot_reg_mod_finish函数添加根据id调用函数处理对应逻辑
1 | void RegisterDialog::slot_reg_mod_finish(ReqId id, QString res, ErrorCodes err) |