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;

	//}
}
相关推荐
爱吃鱼的喵️1 分钟前
云数据库怎么选?主流云厂商横向对比与选型指南
数据库·阿里云·云计算
维克兜率天2 分钟前
4.3.2.1 日常监控:上线只是开始
服务器·数据库·python·区块链·php·量化
水饺编程18 分钟前
编程数学:三角函数基础01,直角三角函数
c语言·c++·windows·visual studio
AIGS00120 分钟前
工艺参数散在Excel和纸质文件里,能不能统一管、随查随用
服务器·数据库·excel·经验沉淀·知识管理·工艺知识·本体语义
裕晟资质规划20 分钟前
军工保密资质二级申报的四个可量化硬条件:条文位置、数值口径与西安配套企业实务要点
java·服务器·网络·数据库·算法
初願致夕霞22 分钟前
C/C++传统程序内存分布(代码实测)
java·c语言·c++
牛油果子哥q23 分钟前
C++对接LLM完整工程:异步HTTP请求、JSON解析、超时容错、重连兜底
c++·http·json
子非鱼a38 分钟前
【WEB】October 2019 Twice SQL Injection
数据库·sql
Elastic 中国社区官方博客41 分钟前
Elasticsearch:ES|QL 搜索教程
大数据·数据库·人工智能·sql·elasticsearch·搜索引擎·全文检索
喂自己代言44 分钟前
从 0.7 秒到 11 毫秒:OceanBase 一条慢 SQL 的三连坑优化实战
数据库·sql·oceanbase