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

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...