登录相应功能实现
当我们点击登录按钮的时候需要对账号和密码进行验证。我们需要提前准备好了所有学员的账号和密码信息account.txt。
那我们如何实现点击登录按钮完成登录了?我们需要用到信号与槽。
那如何来设置呢?在设计模式中右键登录按钮选择转到槽选项。
选择什么样的信号。我们选择clicker()即点击信号。
此时
编译器自动索引到类的源文件,而且生成了一个槽方法。此时按住f2(f2可以切换定义和声明)
按了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,"提示","槽方法调用咯!"); }
代码运行。
正式编程
当点击登录按钮后看,验证用户和密码。此时学员账号全部都是邮箱地址。总所周知很多软件登录邮箱地址不对,会有提示
验证输入的是否是合法的邮箱地址
正则表达式验证邮箱是否正确
使用正则表达式需要使用特定的字符进行组合。
完整代码
#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,"提示","欢迎登录科目一考试系统"); } }
正确输入
错误输入
下一篇
账号密码验证