当前位置: 首页 > news >正文

QT用户登录注册,数据库实现

登录窗口头文件

#ifndef LOGINUI_H
#define LOGINUI_H#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>
#include <QMessageBox>#include <QSqlDatabase> //数据库管理类
#include <QSqlQuery>    //执行sql语句的类
#include <QSqlRecord>   //数据库记录类#include <QKeyEvent>#include "client.h"class LoginUI : public QWidget
{Q_OBJECTprivate://标签类组件QLabel* Background_Lab;QLabel* Titile_Lab;QLabel* Username_Lab;QLabel* Password_Lab;//按钮类组件QPushButton* Close_Btn;QPushButton* Hide_Btn;QPushButton* Login_Btn;QPushButton* Register_Btn;//行编辑器类组件QLineEdit* Username_Edit;QLineEdit* Password_Edit;//声明数据库对象QSqlDatabase db;//UI绘制函数bool DrawLoginUI();//构造函数LoginUI();bool construct();private slots://槽函数void On_CloseBtn_Clicked();void On_Loginbtn_Slots();void On_Registerbtn_Slots();public://实例化对象static LoginUI* NewInstance();void show();~LoginUI();signals:void jump();};
#endif //LOGINUI_H

登录窗口函数实现

#include "LoginUI.h"
#include <QDebug>bool LoginUI::DrawLoginUI()
{bool ret = true;//背景色设置Background_Lab = new QLabel(this);if( Background_Lab != nullptr){Background_Lab->resize(538, 160);Background_Lab->setStyleSheet("background-color:rgb(115,70,240)");}else{ret = false;}//窗口标识Titile_Lab = new QLabel(this);if( Titile_Lab != nullptr ){Titile_Lab->resize(90, 50);Titile_Lab->setPixmap(QPixmap(":/QT_Icon/QQ_Icon.png"));Titile_Lab->setScaledContents(true);}else{ret = false;}//关闭按键Close_Btn = new QPushButton(this);if( Close_Btn != nullptr ){Close_Btn->resize(20, 20);Close_Btn->setIcon(QIcon(":/QT_Icon/close02.png"));Close_Btn->move(508, 10);connect(this->Close_Btn, &QPushButton::clicked, this, &LoginUI::On_CloseBtn_Clicked);}else{ret = false;}//隐藏按键Hide_Btn = new QPushButton(this);if( Hide_Btn != nullptr ){Hide_Btn->resize(20, 20);Hide_Btn->setIcon(QIcon(":/QT_Icon/hide02.png"));Hide_Btn->move(468, 10);connect(this->Hide_Btn, &QPushButton::clicked, this, &LoginUI::hide);}else{ret = false;}//用户名输入栏Username_Edit = new QLineEdit(this);if( Username_Edit != nullptr ){Username_Edit->resize(260, 40);Username_Edit->move(159, 173);Username_Edit->setMaxLength(16);Username_Edit->setPlaceholderText("QQ账号/手机号/邮箱");}else{ret = false;}//密码输入栏Password_Edit = new QLineEdit(this);if( Password_Edit != nullptr ){Password_Edit->resize(260, 40);Password_Edit->move(Username_Edit->x(), Username_Edit->y()+60);Password_Edit->setEchoMode(QLineEdit::Password);Password_Edit->setMaxLength(16);}else{ret = false;}//用户名输入栏标签Username_Lab = new QLabel(this);if( Username_Lab != nullptr ){Username_Lab->resize(30, 30);Username_Lab->move(Username_Edit->x()-40, Username_Edit->y()+5);Username_Lab->setPixmap(QPixmap(":/QT_Icon/windos_icon1.png"));Username_Lab->setScaledContents(true);}else{ret = false;}//密码输入栏标签Password_Lab = new QLabel(this);if( Password_Lab != nullptr ){Password_Lab->resize(30, 30);Password_Lab->move(Password_Edit->x()-40, Password_Edit->y()+5);Password_Lab->setPixmap(QPixmap(":/QT_Icon/password.png"));Password_Lab->setScaledContents(true);}else{ret = false;}//登录按键Login_Btn = new QPushButton("登录",this);if( Login_Btn != nullptr ){Login_Btn->resize(130, 40);Login_Btn->setStyleSheet("background-color:rgb(8,189,253);");Login_Btn->move(Password_Lab->x(), Password_Lab->y()+60);connect(this->Login_Btn, &QPushButton::clicked, this, &LoginUI::On_Loginbtn_Slots);}else{ret = false;}//注册按键Register_Btn = new QPushButton("注册",this);if( Register_Btn != nullptr ){Register_Btn->resize(130, 40);Register_Btn->setStyleSheet("background-color:rgb(8,189,253);");Register_Btn->move(Login_Btn->x()+170, Login_Btn->y());connect(this->Register_Btn, &QPushButton::clicked, this, &LoginUI::On_Registerbtn_Slots);}else{ret = false;}return ret;
}LoginUI::LoginUI(): QWidget(nullptr, Qt::WindowCloseButtonHint)
{
}void LoginUI::show()
{setWindowFlag(Qt::FramelessWindowHint);setFixedSize(538, 373);QWidget::show();
}LoginUI::~LoginUI()
{
}//构造函数
bool LoginUI::construct()
{//UI界面绘制bool ret = true;ret = DrawLoginUI();//数据库创建//判断自己的数据库对象中,是否包含要处理的数据库,没有则添加一个数据库if( !db.contains("UserMsg.db")){//添加一个数据库,调用该类中的静态成员函数addDatabase()db = QSqlDatabase::addDatabase("QSQLITE");//使用sqlite3数据库//设置数据库名字db.setDatabaseName("UserMsg.db");}//此时数据库已经创建完成//打开数据库if( !db.open() ){QMessageBox::information(this, "提示", "数据库打开失败");ret = false;}//使用sql语句进行创建表的操作//准备sql语句QString Create_Table_Sql = "create table if not exists user_msg(""user_name varchar(16) primary key,""password varchar(16))";//准备语句执行者QSqlQuery querry;//执行sql语句if( !querry.exec(Create_Table_Sql) ){QMessageBox::information(this, "提示", "创建表失败");ret = false;}return ret;}//关闭按键槽函数
void LoginUI::On_CloseBtn_Clicked()
{QMessageBox box(QMessageBox::Question, "关闭", "您确定要退出?", QMessageBox::Yes | QMessageBox::No, this);box.setDefaultButton(QMessageBox::No);int ret = box.exec();if(ret == QMessageBox::Yes){this->close();}else if(ret == QMessageBox::No){}
}//登录按键槽函数
void LoginUI::On_Loginbtn_Slots()
{//获取ui界面的用户信息QString name = Username_Edit->text();QString password = Password_Edit->text();if( name.isEmpty() ){QMessageBox::information(this, "提示", "请输入用户名");return;}else if( password.isEmpty() ){QMessageBox::information(this, "提示", "请输入密码");return;}//准备sql查询语句QString sql = QString("select * from user_msg where user_name = '%1' and password = '%2'").arg(name).arg(password);//准备语句执行者QSqlQuery querry;querry.exec(sql);//    qDebug() <<querry.exec(sql);//    qDebug() << querry.value(0);
//    qDebug() << querry.value(1);//执行sql语句if( !querry.next() ){QMessageBox::information(this, "提示", "账号密码错误");return;}else{QMessageBox::information(this, "提示", "登陆成功");emit jump();this->close();}}//注册事件槽函数
void LoginUI::On_Registerbtn_Slots()
{//获取ui界面的用户信息QString name = Username_Edit->text();QString password = Password_Edit->text();//确保用户信息输入完整if( name.isEmpty() || password.isEmpty() ){QMessageBox::information(this, "提示", "请将信息填写完整");return;}//准备sql语句QString sql = QString("insert into user_msg(user_name, password) ""values('%1', '%2')").arg(name).arg(password);//准备语句执行者QSqlQuery querry;if( !querry.exec(sql) ){QMessageBox::information(this, "提示", "注册失败");return;}else{QMessageBox::information(this, "提示", "注册成功");}
}//创建一个新对象
LoginUI *LoginUI::NewInstance()
{LoginUI* ret = new LoginUI;if( !ret->construct() || ret == nullptr ){delete ret;ret = nullptr;}return ret;
}

在这里插入图片描述

相关文章:

QT用户登录注册,数据库实现

登录窗口头文件 #ifndef LOGINUI_H #define LOGINUI_H#include <QWidget> #include <QLineEdit> #include <QPushButton> #include <QLabel> #include <QMessageBox>#include <QSqlDatabase> //数据库管理类 #include <QSqlQuery> …...

GEE学习总结(9)——像元二分法计算月度植被覆盖度(MODIS)

像元二分法计算植被覆盖度 通过MODIS的NDVI数据集MOD13Q1和像元二分法计算植被覆盖度 var multi_NDVI ee.ImageCollection(MODIS/006/MOD13Q1).filterDate(2015-06-01, 2016-09-01).select(NDVI).max().divide(10000).clip(geometry);var ndviVis {min: 0.0,max: 1,palette…...

RabbitMQ用户命令_策略_日志

RabbitMQ相关安装 Centos离线安装RabbitMQ并开启MQTT Docker安装rabbitMQ RabbitMQ集群搭建和测试总结_亲测 Docker安装RabbitMQ集群_亲测成功 RabbitMQ创建管理员命令 #查看当前用户命令&#xff1a; rabbitmqctl list_users#创建用户和密码 rabbitmqctl add_user admin…...

停车场系统、智慧城市停车、智慧社区、物业管理、新能源充电、人脸门禁 uniapp 系统源码

1. 智慧停车 支持模式 封闭性单个停车场路边停车(车位级管理)大小场(场中场)&#xff0c;多场子并行或嵌套 所有者模式 统一平台管理总平台下子账号(区域代理)自建场地资源&#xff0c;自行维护数据总平台下子账号(区域代理)再分配和单个停车场管理人员(物业管理/维保/保安/财务…...

Linux磁盘管理

物理设备的命名规则 在linux系统中一切都是文件&#xff0c;硬件设备也不例外。即然是文件&#xff0c;就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来&#xff0c;目的是让用户通过设备文件的名字可以看出设备大致的属性以及分区信息等&#xff1b;在…...

vue学习之vue cli创建项目

安装 node.js https://nodejs.org/en 安装 vue cli npm install -g @vue/cli --registry=https://registry.npm.taobao.org创建项目 执行创建命令,回车vue create vue-cli-learning选择 “Manually select features”,回车 “空格” 关闭 Linter / Formatter 选项,回车...

K8S:Pod容器中的存储方式及PV、PVC

文章目录 Pod容器中的存储方式一&#xff0e;emptyDir存储卷1.emptyDir存储卷概念2.emptyDir存储卷示例 二.hostPath存储卷1.hostPath存储卷概念2.hostPath存储卷示例 三.nfs共享存储卷1.nfs共享存储卷示例 四.PV和PVC1.PV、PVC概念2.PVC 的使用逻辑及数据流向3.storageclass插…...

uni-app跳转到另一个app

第一步&#xff1a; 首先要知道 app的包名 获取方式如下 第二步&#xff1a; 在第一个 demo1 app 一个页面中需要一个按钮去跳转 方法如下 <template><view class"content"><button click"tz">跳转</button></view> </…...

如何通过一键导出导入数据实现批量重命名文件名称

在日常办公中&#xff0c;我们经常需要对大量的文件进行重命名&#xff0c;以便更好地管理和查找文件。而且&#xff0c;有时候我们还需要将文件名称翻译成其他语言&#xff0c;以适应不同的工作需求。如何高效地完成这项任务呢&#xff1f;接下来&#xff0c;我将介绍一种方法…...

CTF —— 网络安全大赛(这不比王者好玩吗?)

前言 随着大数据、人工智能的发展&#xff0c;人们步入了新的时代&#xff0c;逐渐走上科技的巅峰。 \ ⚔科技是一把双刃剑&#xff0c;网络安全不容忽视&#xff0c;人们的隐私在大数据面前暴露无遗&#xff0c;账户被盗、资金损失、网络诈骗、隐私泄露&#xff0c;种种迹象…...

3D模型转换工具HOOPS Exchange如何实现OBJ格式轻量化?

什么是OBJ模型轻量化&#xff1f; OBJ格式是一种常用的三维模型文件格式&#xff0c;通常包含模型的顶点、法线、纹理坐标等信息&#xff0c;但有时候这些信息可能会使模型文件变得较大&#xff0c;不利于网络传输、加载和运行。 OBJ&#xff08;Object&#xff09;模型轻量化…...

命令模式-

定义&#xff1a;又叫动作模式或事务模式。指的是将一个请求封装成一个对象&#xff0c;使发出请求的责任和执行请求的责任分割开&#xff0c;然后可以使用不同的请求把客户端参数化&#xff0c;这样可以使得两者之间通过命令对象进行沟通&#xff0c;从而方便将命令对象进行储…...

进程的管理

#include <unistd.h> void _exit(int status); #include <stdlib.h> void _Exit(int status); status参数&#xff1a;是进程退出时的状态信息&#xff0c;父进程在回收子进程资源的时候可以获取到 #include<stdio.h> #include<stdlib.h> #includ…...

绿色科技:可持续发展的创新解决方案

标题绿色科技&#xff1a;可持续发展的创新解决方案 摘要引言绿色能源创新1. 太阳能和风能2. 储能技术 可再生资源管理3. 智能农业4. 循环经济 智能城市的未来5. 智能交通6. 城市感知 可持续生活方式7. 可持续建筑8. 智能家居 总结参考资料 博主 默语带您 Go to New World. ✍ …...

安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…...

Python单例模式(3种常用方式)

Python单例模式 1、使用模块&#xff08;推荐&#xff09;2、使用装饰器3、使用new()方法 单例模式是最常见的一种设计模式&#xff0c;该模式确保系统中一个类仅有一个实例 常用的三种实现方式如下&#xff1a; 1、使用模块&#xff08;推荐&#xff09; 模块是天然单例的&a…...

uni-app实现web-view图片长按下载

<template><view><web-view :webview-styles"webviewStyles" :src"webUrl"></web-view></view> </template> uniapp的web-view中图片无法长按保存&#xff0c;IOS下是正常的&#xff0c;但是Android下长按无反应 解…...

深入理解Linux网络笔记(一):内核是如何接收网络包的

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 1、内核是如何接收网络包的 1&#xff09;、Linux网络收包总览 在TCP/I…...

android系统目录结构

文章目录 android系统目录结构问答偏好设置保存在哪里在应用设置中点击清除数据&#xff0c;清除的是什么在应用设置中点击清除缓存&#xff0c;清除的是什么 参考 android系统目录结构 /- system (一般只有root权限才能访问)- data- app &#xff08;存放应用程序的 APK 文件…...

怒刷LeetCode的第11天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;迭代 方法二&#xff1a;递归 方法三&#xff1a;指针转向 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;快慢指针 方法二&#xff1a;Arrays类的sort方法 方法三&#xff1a;计数器 方法四…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...