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

下一篇

账号密码验证

目录
相关文章
|
5月前
|
机器学习/深度学习 算法 算法框架/工具
基于yolov8的深度学习垃圾分类检测系统
本研究针对传统垃圾分类效率低、准确率不高等问题,提出基于YOLOv8与Python的深度学习检测系统。通过构建高质量标注数据集,利用YOLOv8强大的目标检测能力,实现垃圾的快速精准识别,提升分类自动化水平,助力环境保护与资源回收。
|
24天前
|
移动开发 前端开发 JavaScript
前端组件库——Wot Design Uni知识点大全(二)
教程来源 http://unbgv.cn Wot Design Uni 是基于 Vue3+TS 的跨平台 uni-app 组件库,提供 70+ 高质量组件。涵盖按钮、单元格、表单(支持链式校验)、弹窗、Toast、虚拟列表及带徽标的 Tabs 等,全面适配小程序/H5/APP,支持暗黑模式与国际化。
|
Web App开发 缓存 安全
Microsoft Edge 五个神级插件
Microsoft Edge 五个神级插件
6016 0
Microsoft Edge 五个神级插件
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch 中的动态计算图:实现灵活的神经网络架构
【8月更文第27天】PyTorch 是一款流行的深度学习框架,它以其灵活性和易用性而闻名。与 TensorFlow 等其他框架相比,PyTorch 最大的特点之一是支持动态计算图。这意味着开发者可以在运行时定义网络结构,这为构建复杂的模型提供了极大的便利。本文将深入探讨 PyTorch 中动态计算图的工作原理,并通过一些示例代码展示如何利用这一特性来构建灵活的神经网络架构。
1254 1
|
数据可视化 图形学 UED
只需四步,轻松开发三维模型Web应用
为了让用户更方便地应用三维模型,阿里云DataV提供了一套完整的三维模型Web模型开发方案,包括三维模型托管、应用开发、交互开发、应用分发等完整功能。只需69.3元/年,就能体验三维模型Web应用开发功能!
1218 9
只需四步,轻松开发三维模型Web应用
|
Python
微信虚拟聊天对话生成器示例
python实现对话生成器代码示例
1422 0
|
存储 移动开发 定位技术
HTML5 Geolocation(地理定位)优化到最高精度
HTML5 Geolocation API 可让网页访问用户的地理位置信息。为优化地理定位精度,需考虑设备、浏览器设置、网络状况及编码实现。使用 `enableHighAccuracy` 选项请求高精度,并确保设备开启 GPS,网络良好。结合多种数据源(如 GPS、Wi-Fi)可提高准确性。利用 `watchPosition` 定期更新位置,并妥善处理定位错误。务必遵循用户隐私原则,获取同意并遵守相关法规。这样可有效提升地理定位的精度与用户体验。
|
SQL 关系型数据库 MySQL
qt登录界面简单制作,是真的保姆级别了!!!
qt登录界面简单制作,是真的保姆级别了!!!
|
存储 前端开发 Java
Javaweb之SpringBootWeb案例之登录校验功能的详细解析
Javaweb之SpringBootWeb案例之登录校验功能的详细解析
281 0