需求
为了不用频繁输入密码登录,现在大部分的app或者小程序登录后一定的时间内无须再次登录。本人是在板子上写的程序,不方便截图,所以下面用简单的例子代替。
大致效果
主界面
点击设置弹出登录界面
点击返回退回到主界面
如果再次点击设置不用点击登陆(正常需要输入密码等操作),直接进入设置界面。
思路
主要的软件逻辑如下图:
首先想到的是:定义一个可以在多个cpp中使用的全局变量用来储存超时时间(sec),在设置界面的cpp中,点击退出按钮启动定时器,sec每秒加一,在主界面的 点击设置按钮槽函数 中判断,如果超时时间(sec)大于0s或小于等于10s,设置界面show(),否则登录界面show()。这样有个问题,就是第一次点击设置界面中的的退出按钮退回到主界面,定时器是正常的,再次点击主界面中的设置按钮到设置界面,然后点击退出,定时器变成了一秒加两次,问题没解决,可能是多次定时器重复启动问题。
之后选择了另一种方法:利用系统时间。同样定义一个全局变量msc,当在设置界面点击退出后,获取当前时间,转化为秒数后,加10赋值给msc作为判断的条件(10为超时10秒即10秒内不用登录)。然后在主界面的cpp文件中,在点击设置按钮的槽函数中,获取当前时间,如果当前时间大于msc,登录界面show(),否则设置界面show()。
主要代码
首先添加全局变量:
def.h
#ifndef DEF_H
#define DEF_H
extern int OverTime ;
class def
{
public:
def();
~def();
};
#endif // DEF_H
def.cpp
#include "def.h"
int OverTime = 0;
def::def()
{
}
def::~def()
{
}
然后是设置界面主要代码:
头文件添加def.h
#include "def.h"
cpp文件
//点击退出当前界面
void FaceID::on_ExitButton_clicked()
{
QTime t=QTime::currentTime();
int startSec = QDateTime::currentDateTime().toTime_t();
OverTime = startSec + 10; //设置超时时间
this->close();
}
主界面:
.h文件
#include "faceid.h"
#include "login.h"
#include "def.h"
FaceID faceid; //设置界面
Login login; //登录界面
.cpp
//点击弹出设置界面或登录界面
void MianWindow::on_SettingButton_clicked()
{
int currentSec = QDateTime::currentDateTime().toTime_t();
if(currentSec > OverTime)
{
login.show();
}
else
{
faceid.show();
}
}
总结
没有搜到关于此类型的qt例子,所以自己写了个,而且我的表述可能不是太清楚,不明白的可以在评论中问我。