当前位置: 首页 > 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;计数器 方法四…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...