前言
在之前的两篇博客中QT C++实战:实现用户登录页面及多个界面跳转、QT C++实践|超详细数据库的连接和增删改查操作|附源码分别详细讲解了:登录界面的制作(UI布局、页面跳转、登录逻辑等)、QT如何连接Mysql数据库,并进行增删改查。
在前者登录界面的实现中,我们是把用户名和密码设死在代码内部的,不涉及到数据库,虽然这样很简单,但是实际过程中还是不够人性化。今天,我们要将这两个知识点结合起来,如何在登陆中连接数据库,实现用户登录。
Tips:本篇博客默认已经阅读前两篇博客,并已经拥有如何连接数据库和设计登录的UI界面的基础,固省略很多细节,主要讲“变”。强烈建议先阅读前两篇博客!
一、实现
1.1:前言
- 在登录界面连接数据库,调用
connection.h
中的createConnection()
创建数据库连接。 - 在关闭界面的函数内,关闭数据库,释放资源:
if (db.isOpen()) {db.close(); }// 然后,从连接池中移除该连接 QSqlDatabase::removeDatabase("connection1");
- 遍历数据库,将用户名、密码依次和数据库中的信息进行对比,若有一样,则可以进入主界面。
💁🏻♀️使用 QSqlQuery 来执行一个查询,并使用循环来遍历结果集
1.2:具体
首先在登陆界面Login.cpp
的构造函数中加入下面创建数据库连接的代码:
//创建数据库连接if (!createConnection()) {return;}db = QSqlDatabase::database("connection1");//
注意db
是定义在头文件中公共成员变量中的:
public:Login(QWidget *parent = nullptr);~Login();QSqlDatabase db;
再就是主要修改登录界面的登录按钮的槽函数:
//登录按钮对应槽函数:登陆成功跳转到主功能界面or管理员界面
void Login::inlog_clicked() {//获取用户名和密码输入框中数据QString nameString = ui.name->text();QString pswdString = ui.pswd->text();//遍历数据库int non_flag = 1;//标志数据库中没有该用户信息QSqlQuery query(db);query.exec("select * from user");//执行sql语句bool success = query.exec("SELECT * FROM user");if (success) {while (query.next()) {//获取QString uName = query.value(1).toString();QString uPwd = query.value(2).toString();//QMessageBox::about(this, "显示", "用户名:"+uName +"密码"+uPwd);//比较if (nameString == uName && pswdString == uPwd) {//创建功能主界面并显示new_QT_python* w = new new_QT_python();this->hide();non_flag = 0;w->show();db.close();QSqlDatabase::removeDatabase("connection1");break;}}if (non_flag) {QMessageBox::about(this, "警告", "用户名或密码错误");}}else {// 查询执行失败QSqlError error = query.lastError();QString errorMessage = error.text();QMessageBox::about(this, "数据库错误", "查询失败" + errorMessage);}//if (nameString == QString::fromLocal8Bit("admin")&& pswdString == QString::fromLocal8Bit("123456")) {// Admin* w = new Admin();// this->close();// w->show();//}//else if (nameString == QString::fromLocal8Bit("user") && pswdString == QString::fromLocal8Bit("111111")) {// //创建功能主界面并显示// new_QT_python* w = new new_QT_python();// this->close();// w->show();//}//else {// QMessageBox::about(this, "警告", "用户名或密码错误");// return;//}
}