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;

	//}
}
相关推荐
Coder_Boy_2 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy2 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
2301_763472464 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
阿猿收手吧!4 小时前
【C++】std::promise原理与实战解析
c++
数据知道4 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_12498707534 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha4 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_4 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Gain_chance4 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
m0_706653235 小时前
分布式系统安全通信
开发语言·c++·算法