QT C++实践| 连接数据库的登录界面实现| 附源码

前言

在之前的两篇博客中QT C++实战:实现用户登录页面及多个界面跳转QT C++实践|超详细数据库的连接和增删改查操作|附源码分别详细讲解了:登录界面的制作(UI布局、页面跳转、登录逻辑等)、QT如何连接Mysql数据库,并进行增删改查。

在前者登录界面的实现中,我们是把用户名和密码设死在代码内部的,不涉及到数据库,虽然这样很简单,但是实际过程中还是不够人性化。今天,我们要将这两个知识点结合起来,如何在登陆中连接数据库,实现用户登录。

Tips:本篇博客默认已经阅读前两篇博客,并已经拥有如何连接数据库和设计登录的UI界面的基础,固省略很多细节,主要讲"变"。强烈建议先阅读前两篇博客!

一、实现

1.1:前言

  • 在登录界面连接数据库,调用connection.h中的createConnection()创建数据库连接。

  • 在关闭界面的函数内,关闭数据库,释放资源:

    cpp 复制代码
    if (db.isOpen()) {
    	db.close();
    }
    
    // 然后,从连接池中移除该连接
    QSqlDatabase::removeDatabase("connection1");
  • 遍历数据库,将用户名、密码依次和数据库中的信息进行对比,若有一样,则可以进入主界面。
    💁🏻‍♀️使用 QSqlQuery 来执行一个查询,并使用循环来遍历结果集

1.2:具体

首先在登陆界面Login.cpp的构造函数中加入下面创建数据库连接的代码:

cpp 复制代码
//创建数据库连接
	if (!createConnection()) {
		return;
	}
	db = QSqlDatabase::database("connection1");//

注意db是定义在头文件中公共成员变量中的:

cpp 复制代码
public:
	Login(QWidget *parent = nullptr);
	~Login();
	QSqlDatabase db;

再就是主要修改登录界面的登录按钮的槽函数:

cpp 复制代码
//登录按钮对应槽函数:登陆成功跳转到主功能界面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;

	//}
}
相关推荐
choumin2 小时前
创建型模式——工厂方法模式
c++·设计模式·工厂方法模式·创建型模式
云小逸2 小时前
【SVN 详细使用指南:从入门到团队协作】
c++·svn
kirs_ur2 小时前
ECC & LDPC — SSD 的数据卫士
服务器·数据库·性能优化
是三一seven3 小时前
Sql注入基础
数据库·安全·网络安全
Sirens.3 小时前
MySQL表设计进阶-约束范式连接索引与事务
android·数据库·mysql
字节跳动开源4 小时前
火山引擎开源 Agent 驱动的搜索自迭代技术
数据库·开源·agent
龚建波6 小时前
《QDebug 2026年6月》
qt
Oo大司命oO7 小时前
藏在正则表达式里的陷阱
数据库·mysql·正则表达式
ziguo11227 小时前
深入浅出 C/C++ 数据类型:从入门到踩坑
linux·c语言·c++·windows·visual studio
_oP_i8 小时前
mysql统计数据库使用存储大小
数据库