将注册的账号密码存储到数据库中
登录的账号密码与数据库中的账号密码进行匹配
头文件
#ifndef DENGLU_H
#define DENGLU_H
#include <QMainWindow>
#include <QDebug>
#include <QIcon>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include "second.h"
#include <QMessageBox> //消息对话框类
#include "third.h"
#include <QSqlDatabase> //数据库管理类
#include <QSqlQuery> //执行sql语句的类
#include <QSqlRecord> //数据库记录的类QT_BEGIN_NAMESPACE
namespace Ui { class denglu; }
QT_END_NAMESPACEclass denglu : public QMainWindow
{Q_OBJECTpublic:denglu(QWidget *parent = nullptr);~denglu();
signals:void jump(); //自定义跳转信号函数void jump1();
private slots:void b1_clicked();void b2_clicked();void b3_clicked();private:Ui::denglu *ui;QLabel *lab1;QLabel *lab2;QLabel *lab3;QLineEdit *edit1;QLineEdit *edit2;QPushButton *b1;QPushButton *b2;QPushButton *b3;Second *s1;third *s2;QSqlDatabase db;
};
#endif // DENGLU_H
#ifndef THIRD_H
#define THIRD_H#include <QWidget>
#include <QMessageBox>
#include <QDebug>
#include <QIcon>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QSqlDatabase> //数据库管理类
#include <QSqlQuery> //执行sql语句的类
#include <QSqlRecord> //数据库记录的类
namespace Ui {
class third;
}class third : public QWidget
{Q_OBJECTpublic:explicit third(QWidget *parent = nullptr);~third();public slots:void jump_slot1();
private slots:void on_btn1_clicked();private:Ui::third *ui;//声明一个数据库的类对象QSqlDatabase db;
};#endif // THIRD_H
源文件
#include "denglu.h"
#include "ui_denglu.h"
denglu::denglu(QWidget *parent): QMainWindow(parent), ui(new Ui::denglu)
{ui->setupUi(this);this->setFixedSize(430,360); //设置固定主界面尺寸this->setWindowTitle("Widget"); //设置窗口标题this->setWindowIcon(QIcon(":/Image/icon/wodepeizhenshi.png"));//实例化一个标签lab1 = new QLabel(this);lab1->resize(430,180); //设置占窗体一半尺寸lab1->setPixmap(QPixmap(":/Image/icon/jinx.bmp"));lab1->setScaledContents(1);//实例化第二个标签lab2 = new QLabel(this);lab2->resize(45,30); //设置尺寸lab2->move(this->x()+65,this->y()+200); //移动位置lab2->setPixmap(QPixmap(":/Image/icon/userName.jpg"));//填充图片lab2->setScaledContents(1);//实例化第三个标签lab3 = new QLabel(this);lab3->resize(45,30); //设置尺寸lab3->move(lab2->x(),lab2->y()+60); //移动位置lab3->setPixmap(QPixmap(":/Image/icon/passwd.jpg"));//填充图片lab3->setScaledContents(1);//实例化行编辑器1edit1 = new QLineEdit(this);edit1->resize(200,32); //设置尺寸edit1->move(lab2->x()+55,lab2->y()); //移动位置edit1->setPlaceholderText("admin"); //设置默认值,占位文本edit1->setMaxLength(20); //设置最大文本容量//实例化行编辑器2edit2 = new QLineEdit(this);edit2->resize(200,32); //设置尺寸edit2->move(lab3->x()+55,lab3->y()); //移动位置edit2->setEchoMode(QLineEdit::Password); //设置回显模式edit2->setMaxLength(20); //设置最大文本容量//实例化按钮1b1 = new QPushButton(QIcon(":/Image/icon/login.png"),"登录",this);b1->resize(80,32); //设置尺寸b1->move(this->x()+100,lab3->y()+50); //移动位置//实例化按钮2b2 = new QPushButton(QIcon(":/Image/icon/cancel.png"),"取消",this);b2->resize(80,32); //设置尺寸b2->move(this->x()+230,b1->y()); //移动位置//实例化按钮3b3 = new QPushButton(this);b3->resize(80,32); //设置尺寸b3->setText("注册");b3->move(edit1->x()+220,edit1->y()+40); //移动位置//将当前界面的信号,与登录消息对话框函数连接connect(b1,&QPushButton::clicked,this,&denglu::b1_clicked);//将当前界面的信号,与取消消息对话框函数连接connect(b2,&QPushButton::clicked,this,&denglu::b2_clicked);//将当前界面的信号,与取消消息对话框函数连接connect(b3,&QPushButton::clicked,this,&denglu::b3_clicked);//将当前界面的信号,与s1界面的槽函数进行连接s1 = new Second;connect(this,&denglu::jump,s1,&Second::jump_slot);s2 = new third;connect(this,&denglu::jump1,s2,&third::jump_slot1);
}denglu::~denglu()
{delete ui;
}//登录按钮,如果账号密码和数据库中存储的账号密码一直就登录成功,否则登陆失败
void denglu::b1_clicked()
{//判断自己的数据库对象中是否包含了要处理的数据库,如果没有包含则添加一个数据库,//如果包含了,就可以打开了if(!db.contains("mydb1.db")){db = QSqlDatabase::addDatabase("QSQLITE");//设置数据库名字db.setDatabaseName("mydb1.db");}//此时已经有了一个名为mydatabase的数据//打开数据库if(!db.open()){QMessageBox::information(this,"失败","打开数据库失败");return ;}//查找名为user_info的数据表的内容QString username = this->edit1->text();QString sql = QString("select * from user_info where user_id = '%1'").arg(username);//语句执行者QSqlQuery q;if(!q.exec(sql)){QMessageBox::information(this,"提示","显示失败");return ;}QString dbpassword;while(q.next()){dbpassword = q.value("password").toString();}if(this->edit1->text() == "" ||this->edit2->text()== ""){QMessageBox::information(this,"提示","用户名或密码不能为空");return ;}else if(this->edit2->text()==dbpassword){//直接调用静态成员函数完成对话框的实现int ret = QMessageBox::information(this,"信息","登录成功",QMessageBox::Ok);if(ret ==QMessageBox::Ok){//关闭登录界面this->hide();//跳转到其他页面emit jump();}}else{QMessageBox box(QMessageBox::Critical,"出错","账号密码不匹配,是否重新登录",QMessageBox::Ok|QMessageBox::Cancel,this); //父组件box.setDefaultButton(QMessageBox::Ok); //设置默认//调用exec函数允许对话框int ret = box.exec();//对结果进行判断if(ret == QMessageBox::Ok){this->edit2->clear();}else if(ret == QMessageBox::Cancel){this->hide();}}}void denglu::b2_clicked()
{int ret = QMessageBox::information(this,"退出","是否确定要退出登录",QMessageBox::Yes|QMessageBox::No);if(ret == QMessageBox::Yes){this->close();}else if(ret == QMessageBox::No){//不做操作}
}void denglu::b3_clicked()
{emit jump1();
}
注册界面
#include "third.h"
#include "ui_third.h"third::third(QWidget *parent) :QWidget(parent),ui(new Ui::third)
{ui->setupUi(this);//判断自己的数据库对象中是否包含了要处理的数据库,如果没有包含则添加一个数据库,//如果包含了,就可以打开了if(!db.contains("mydb1.db")){db = QSqlDatabase::addDatabase("QSQLITE");//设置数据库名字db.setDatabaseName("mydb1.db");}//此时已经有了一个名为mydatabase的数据//打开数据库if(!db.open()){QMessageBox::information(this,"失败","打开数据库失败");return ;}//数据库已经打开,需要创建一个数据表//准备sql语句QString sql = "create table if not exists user_info(user_id varchar(20) primary key,password varchar(20))";//准备语句执行者QSqlQuery q;//调用QSqlQuery类下的成员函数exec执行sql语句if(!q.exec(sql)){QMessageBox::information(this,"失败","创建数据表失败");return ;}}third::~third()
{delete ui;
}
void third::jump_slot1()
{this->show();
}//注册按钮对应的槽函数
void third::on_btn1_clicked()
{//获取ui界面中要录入的数据//账号QString user_id = ui->ledit1->text();//密码QString password = ui->ledit2->text();//判断要确保每个编辑器下都有数据if(user_id.isEmpty() || password.isEmpty()){QMessageBox::information(this,"提示","请将信息填写完整");return ;}//准备sql语句向表中添加数据QString sql = QString("insert into user_info(user_id,password)""values('%1','%2')").arg(user_id).arg(password);qDebug()<<sql;//准备语句执行者QSqlQuery querry;if(!querry.exec(sql)){QMessageBox::information(this,"失败","添加失败");return ;}else{QMessageBox::information(this,"成功","添加成功");}
}