04——驾校科目一考试——登录窗口的功能(验证邮箱地址)

简介: 登录相应功能实现当我们点击登录按钮的时候需要对账号和密码进行验证。我们需要提前准备好了所有学员的账号和密码信息account.txt。

登录相应功能实现

当我们点击登录按钮的时候需要对账号和密码进行验证。我们需要提前准备好了所有学员的账号和密码信息account.txt。

794efa85190c43cfb7a0d7f981bb0630.png

那我们如何实现点击登录按钮完成登录了?我们需要用到信号与槽。

那如何来设置呢?在设计模式中右键登录按钮选择转到槽选项。

111cc8abcca441f690e835117845a5bf.png


选择什么样的信号。我们选择clicker()即点击信号。


此时

编译器自动索引到类的源文件,而且生成了一个槽方法。此时按住f2(f2可以切换定义和声明)

37f1bd50737f4057bba5974eaa3590f7.png按了f2之后进入 .h文件,。可以看到这是以私有的槽方法。

注意:放我们使用自动生成的槽方法的时候,编译器起名都是以 on开头然后下划线控件对象名字下划线信号的名字。再按f2回到实现函数。

测试是否会真的响应。写一个小的消息框进行测试。

//完整测试代码!!
#include "logindialog.h"
#include "ui_logindialog.h"
#include<QtWidgets>
#include<QMessageBox>
LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    //setupUi初始化界面方法
    ui->setupUi(this);
    //解决空隙
    /*
    标签有个方法可以设置自己的填充属性。
    那么界面信息上面的空间我们怎么去访问呢?通过 ui指针。因为ui指向的是描述界面信息的这个类对象。
    所以我们通过 ui来访问界面上的控件。
    使用ui前,先给控件设置好名字是关键。
    */
    //ui通过标签属性访问到图像然后调用 setScaledContents方法选择是否填充。true(填充)、false(不填充)
    ui->imgLabel->setScaledContents(true);
    //设置填充之后,我们还需要设置当前窗体的宽和高,需要和标签一致的大小。
    this->resize(ui->imgLabel->width(),ui->imgLabel->height());//使用resize重新设置整个窗体的大小 (width,height)
    //设置窗口风格   方法太长怎么办?真的一个一个敲?可以通过缩写 如设置标题:sWT(输入首字母)就能直接出来了。
    this->setWindowTitle("驾校科目一考试登录");//设置标题
    //设置一个普通的对话框,问号我们就不需要了,再加一个关闭按钮即可。
    this->setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint);
}
LoginDialog::~LoginDialog()
{
    //析构进行自然回收
    delete ui;
}
void LoginDialog::on_loginBtn_clicked()
{
    /*传入参数:
        第一个:指定一个父窗口
        第二个:提示的一个标题
        第三个:提示的内容
    */
    QMessageBox::information(this,"提示","槽方法调用咯!");
}

代码运行。

9ad7f773f60e4f30890c8c245f640964.png

8beeb372819748109997519e19c34ffb.png

正式编程

当点击登录按钮后看,验证用户和密码。此时学员账号全部都是邮箱地址。总所周知很多软件登录邮箱地址不对,会有提示


482b154ea5a54534afe94514b6768e19.png

验证输入的是否是合法的邮箱地址

正则表达式验证邮箱是否正确

使用正则表达式需要使用特定的字符进行组合。

完整代码

#include "logindialog.h"
#include "ui_logindialog.h"
#include<QtWidgets>
#include<QMessageBox>
LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    //setupUi初始化界面方法
    ui->setupUi(this);
    //解决空隙
    /*
    标签有个方法可以设置自己的填充属性。
    那么界面信息上面的空间我们怎么去访问呢?通过 ui指针。因为ui指向的是描述界面信息的这个类对象。
    所以我们通过 ui来访问界面上的控件。
    使用ui前,先给控件设置好名字是关键。
    */
    //ui通过标签属性访问到图像然后调用 setScaledContents方法选择是否填充。true(填充)、false(不填充)
    ui->imgLabel->setScaledContents(true);
    //设置填充之后,我们还需要设置当前窗体的宽和高,需要和标签一致的大小。
    this->resize(ui->imgLabel->width(),ui->imgLabel->height());//使用resize重新设置整个窗体的大小 (width,height)
    //设置窗口风格   方法太长怎么办?真的一个一个敲?可以通过缩写 如设置标题:sWT(输入首字母)就能直接出来了。
    this->setWindowTitle("驾校科目一考试登录");//设置标题
    //设置一个普通的对话框,问号我们就不需要了,再加一个关闭按钮即可。
    this->setWindowFlags(Qt::Dialog|Qt::WindowCloseButtonHint);
}
LoginDialog::~LoginDialog()
{
    //析构进行自然回收
    delete ui;
}
void LoginDialog::on_loginBtn_clicked()
{
    //正则验证邮箱地址: 用户名@域名
    //正则表达式的元字符代表的意思:
    //^:表示规则字符串的开始 $:表示规则字符串的结束
    //+:表示匹配次数≥1次,即最少出现一次
    //*:表示匹配任意次数(可为0次){n,m} 表示匹配次数,至少n次,至多m次
    //使用正则表达式需要使用  QRegExp类
    // \. 视为了转义 .
     QRegExp rx("^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$");
    //使用正则。传入参数是想要匹配的对象:这里想要匹配的是用户账号。
    //所以需要获取空间上的文本信息: ui->accountEdit->text()
    bool res=rx.exactMatch(ui->accountEdit->text());
    if(!res)
    {//匹配不成!
        QMessageBox(this,"提示","非法的邮箱地址,请重新输入");
    }
    else
    {
        QMessageBox(this,"提示","欢迎登录科目一考试系统");
    }
}


正确输入

81363b9e5c8c4d8aa94cfdb116812e30.png

错误输入8a20798b435a47039377786085547969.png

下一篇

账号密码验证

目录
相关文章
|
6月前
|
小程序 JavaScript 前端开发
培训报名小程序-用户注册
培训报名小程序-用户注册
|
缓存 安全 前端开发
十分钟搞懂手机号码一键登录
十分钟搞懂手机号码一键登录
1461 0
|
1月前
|
SQL 存储 数据采集
如何把问卷录入SQL数据库
将问卷数据录入SQL数据库是一个涉及数据收集、处理和存储的过程
|
6月前
|
设计模式 数据安全/隐私保护
|
6月前
|
设计模式 数据安全/隐私保护
03——驾校科目一考试系统——登录界面(1)
双击ui文件进入设计模式。 想要把我们的登录窗口做成什么样的效果呢?理想效果图如下所示:用户需要一个账号和密码输入。最后还需要给用户两个按钮:一个登录按钮,一个取消按钮。
138 2
|
6月前
|
设计模式
03——驾校科目一考试系统——登录界面(2)
运行项目——成功添加背景图 缺点:背景图片盖住了登录界面。
105 2
|
存储 数据安全/隐私保护 开发者
Python实现登陆界面+生日界面
Python实现登陆界面+生日界面
56 0
|
存储 前端开发 NoSQL
如何设计 QQ、微信等第三方账号登陆 ?还要我说出数据库表设计!
如何设计 QQ、微信等第三方账号登陆 ?还要我说出数据库表设计!
306 2
|
API 数据安全/隐私保护
漏刻有时忘记超级管理员密码的解决方案:通过API接口设置超级管理员
漏刻有时忘记超级管理员密码的解决方案:通过API接口设置超级管理员
84 0
|
数据可视化 前端开发 Java
servlet+mysql实现的学生评教系统(角色:学生、教师、管理员 功能:评教、修改密码、评教规则管理、评教结果查看、学生管理、教师管理、班级管理、学生信息、评教结果可视化展示等)
servlet+mysql实现的学生评教系统(角色:学生、教师、管理员 功能:评教、修改密码、评教规则管理、评教结果查看、学生管理、教师管理、班级管理、学生信息、评教结果可视化展示等)
servlet+mysql实现的学生评教系统(角色:学生、教师、管理员 功能:评教、修改密码、评教规则管理、评教结果查看、学生管理、教师管理、班级管理、学生信息、评教结果可视化展示等)