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;//}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node的概念

node和浏览器有什么区别和联系,及node进行服务端开发的本质 Node.js和浏览器在JavaScript运行环境方面存在一些区别和联系。 区别: 运行环境:Node.js是一个服务器端JavaScript运行环境,而浏览器是一个客户端JavaScript运行环境…

EPSON RA8000CE (RTC模块)压电侠

RA8000CE是一个集成了32.768 kHz数字温度补偿晶体振荡器(DTCXO)的RTC模块。它包括各种功能,如具有闰年校正的秒到年时钟/日历,时间警报,唤醒计时器,时间更新中断,时钟输出和时间戳功能,可以在外部或内部事件…

C++--调整数组顺序使奇数位于偶数前面

题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 方法一: …

2024年最新苹果cms MXoneV10 10.8版本模板独家

2024年最新苹果cms MXoneV10 10.8版本模板独家 源码下载:https://download.csdn.net/download/m0_66047725/88891237 更多资源下载:关注我。

python+django_vue旅游酒店预订出行订票系统pycharm项目lw

a.由于对管理信息方面的内容了解尚浅且没有足够的经验,因而很难对数据庞大的线上旅行信息管理系统建立完善的数据库。 b.线上旅行信息管理系统拥有很大的信息量,其中包括数据库的前期开发和后期更新,因此对数据库的安全性,一致性和…

Flinksql实时计算——group by key和 group by key 带窗口聚合有什么不同

在 Flink SQL 中,GROUP BY key 和 GROUP BY key 带窗口聚合的主要区别在于它们如何处理数据的时间维度和计算结果的粒度。 简单的 GROUP BY key:当使用简单的 GROUP BY 对 key 进行聚合时,你会得到一个按指定 key 分组的静态聚合结果。这个聚合是基于 key 的所有历史数据进行…

Stable Diffusion 3报告

报告链接:https://stability.ai/news/stable-diffusion-3-research-paper 文章目录 要点表现架构细节通过重新加权改善整流流量Scaling Rectified Flow Transformer Models灵活的文本编码器RF相关论文 要点 发布研究论文,深入探讨Stable Diffuison 3的…

seata服务器集群搭建

搭建seata-server-1.3服务器对应SpringBoot2.3.12&#xff0c;springcloud2.2.3 <spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version> 首先你安装了nacos 1解压文件 2修改cong/file.conf 让seata集群信息可以共享&#xff0c;我们应该…

python中异常的处理

<1>捕获全部异常&#xff1a; try:dopen("E:/abc.txt","r",encoding"UTF-8") except:print("出现异常了&#xff0c;因为文件不存在&#xff0c;将open的模式改为w模式去打开&#xff0c;这样会创建&#xff08;写出&#xff09;文件…

C++对象模型剖析(六)一一Function语义学(一)

Function语义学&#xff08;一&#xff09; C支持三种类型的 function&#xff1a; nonstatic member functionstatic member functionvirtual member funcion Member 的各种调用方式 Nonstatic Member Funcions非静态成员函数 C的设计准则之一就是&#xff1a;**nonstatic …

云手机运行在云端?安全性有保障吗

随着云计算技术的不断发展&#xff0c;云手机作为一种新兴的移动终端形态&#xff0c;逐渐成为人们关注的焦点。然而&#xff0c;对于许多人来说&#xff0c;云手机 是一个相对陌生的概念&#xff0c;安全性成为了他们最为关心的问题之一。本文将就云手机运行在云端的特点以及其…

SDL基础使用07(YUV数据显示)

SDL显示YUV数据和文件 使用SDL播放随机yuv数据 #include <stdio.h> #include <Windows.h>extern "C" { #include <SDL.h> }#pragma comment(lib, "SDL2.lib")/* 填充随机颜色 */ static void FillYuvImage(BYTE* pYuv, int nWidth, i…

Neo4j 新手教程 环境安装 基础增删改查 python链接 常用操作 纯新手向

Neo4j安装教程&#x1f680; 目前在学习知识图谱的相关内容&#xff0c;在图数据库中最有名的就是Neo4j,为了降低入门难度&#xff0c;不被网上很多华丽呼哨的Cypher命令吓退&#xff0c;故分享出该文档&#xff0c;为自己手动总结&#xff0c;包括安装环境&#xff0c;增删改查…

华为Web举例:私网用户通过三元组NAT访问Internet

Web举例&#xff1a;私网用户通过三元组NAT访问Internet 介绍私网用户通过三元组NAT访问Internet的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网中10.1.1.0/24网段的用户可以正常访问Internet&#xff0c;需要在FW上配置源NAT策略。除了公网接口…

修改表中某个字段等于另一个字段减去 2 小时的 SQL

需求&#xff1a;将表中到达时间按照客户要求改为比赛时间的提前 N 小时&#xff0c;具体如下&#xff1a; 表结构 update contestSchedule SET mainRefereeArrivalTimeDATE_FORMAT(CONCAT(2024-03-04 ,gameTime)- INTERVAL 2 HOUR, %H:%i), assistantRefereeArrivalTimeDAT…

【Unity】UnityWebRequest time out 0 bytes received问题

关键词&#xff1a;UnityWebRequest、Http协议、Get请求、0 bytes received using Newtonsoft.Json; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking;public class MyWebRequest : MonoBehavi…

2024关于idea激活码报This license xxxx has been suspended

HOSTS文件中增加 0.0.0.0 www.jetbrains.com 0.0.0.0 account.jetbrains.com 然后

代码随想录 二叉树第五周

目录 235.二叉搜索树的最近公共祖先 701.二叉搜索树的插入操作 450.删除二叉搜索树中的节点 669.修建二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 235.二叉搜索树的最近公共祖先 235. 二叉搜索树的最近公共祖先 中等 给定一个二叉搜索树,…

浅谈MySQL 索引

MySQL 索引类型 1&#xff1a;主键索引 索引列中的值必须是唯一的&#xff0c;不允许有空值。 2&#xff1a;普通索引 MySQL中基本索引类型&#xff0c;没有什么限制&#xff0c;允许在定义索引的列中插入重复值和空值。 3&#xff1a;唯一索引 索引列中的值必须是唯一的&…