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

前言

在之前的两篇博客中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;

	//}
}
  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 QtMySQL 实现数据库和界面同步的方法有很多种。下面是其中一种可能的实现方式: 1. 首先,需要在 Qt 项目中添加 MySQL 驱动程序,以便能够连接到 MySQL 数据库。可以通过在项目文件(.pro)中添加以下行来完成此操作: ``` QT += sql QT += mysql ``` 2. 在 Qt 中连接到 MySQL 数据库。可以使用以下代码创建一个 MySQL 数据库连接: ``` QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("mydatabase"); db.setUserName("username"); db.setPassword("password"); if (!db.open()) { qDebug() << db.lastError().text(); } ``` 这将连接到名为 `mydatabase` 的 MySQL 数据库。要使用其他数据库,请修改 `setDatabaseName()` 方法中的数据库名称。 3. 在 Qt 中创建一个数据模型以显示 MySQL 数据库中的数据。可以使用 `QSqlTableModel` 类来实现此目的。以下代码演示如何创建一个数据模型: ``` QSqlTableModel *model = new QSqlTableModel(); model->setTable("mytable"); model->select(); ui->tableView->setModel(model); ``` 这将在 Qt 窗口中创建一个表格视图,其中包含名为 `mytable` 的 MySQL 数据表中的数据。 4. 在 Qt 窗口中添加一个表单以允许用户输入新数据并将其保存到 MySQL 数据库中。可以使用以下代码创建一个表单: ``` QSqlTableModel *model = new QSqlTableModel(); model->setTable("mytable"); model->select(); ui->tableView->setModel(model); QSqlRecord record = model->record(); int row = model->rowCount(); model->insertRecord(row, record); ``` 这将在 Qt 窗口中添加一个新的空行,用户可以在其中输入新数据。要将此新数据保存到 MySQL 数据库中,请使用以下代码: ``` model->submitAll(); ``` 这将将所有更改保存回 MySQL 数据库。 通过以上步骤,就可以实现 QtMySQL 数据库之间的同步。当用户在 Qt 窗口中输入新数据时,它将自动保存到 MySQL 数据库中,并且在 Qt 窗口中显示的数据也将自动更新以显示最新的 MySQL 数据库中的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是瑶瑶子啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值