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

从L0到L3的完整路径,Token降61%的底层逻辑,TencentDB Agent Memory实战:分层记忆架构详解

TencentDB Agent Memory实战&#xff1a;分层记忆架构详解 副标题: 从L0到L3的完整路径&#xff0c;Token降61%的底层逻辑痛点&#xff1a;为什么你的AI总是"记不住"&#xff1f; 你有没有遇到过这样的情况&#xff1a; AI能记住前几轮对话&#xff0c;但聊久了就&qu…...

DS18B20单总线温度传感器在CircuitPython中的实战应用指南

1. 项目概述与单总线协议的价值如果你正在用像Adafruit Feather M0 Express或Raspberry Pi Pico这类小巧的板子做项目&#xff0c;需要测量温度&#xff0c;DS18B20绝对是一个绕不开的经典选择。我这些年做过不少环境监测、智能家居的小玩意儿&#xff0c;从鱼缸水温到3D打印机…...

新手首次使用 Taotoken 从注册到完成第一个 API 调用的完整指南

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 新手首次使用 Taotoken 从注册到完成第一个 API 调用的完整指南 本文旨在为初次接触 Taotoken 的开发者提供一份清晰的入门指引。我…...

【信息科学与工程学】【物理/化学科学和工程技术】知识体系 第四十篇 低空/高空领域中的力学知识 01

低空与高空(地球大气层内/地球大气层外)领域的核心力学知识。 编号:001 类别:流体力学 / 连续介质力学 领域:低空飞行器空气动力学 力学模型配方:Navier-Stokes方程组(可压缩/不可压缩) 数学分析:求解控制流体运动的质量、动量和能量守恒偏微分方程组。 定理/算法…...

离子阱量子计算机与SIMD编译优化技术解析

1. 离子阱量子计算机与SIMD的奇妙结合在量子计算领域&#xff0c;离子阱系统因其独特的物理特性而备受关注。与传统超导量子比特不同&#xff0c;离子阱量子计算机通过电磁场将带电原子&#xff08;通常是镱或钙离子&#xff09;悬浮在真空中&#xff0c;利用激光操控这些离子的…...

从零开始:手把手教你用Python解析MMD的PMX模型文件(附完整代码)

从零开始&#xff1a;手把手教你用Python解析MMD的PMX模型文件&#xff08;附完整代码&#xff09; 在3D图形与游戏开发领域&#xff0c;MMD&#xff08;MikuMikuDance&#xff09;的PMX模型文件因其丰富的表情骨骼系统和精致的二次元风格而广受欢迎。本文将带领你从二进制层面…...

零基础玩转Linux:CentOS安装、Xshell连接与文件权限全攻略

零基础玩转Linux:CentOS安装、Xshell连接与文件权限全攻略 目录 1、Linux系统简介 2、安装Linux 3、Linux相关配制 3.1 配制静态IP 3.2 安装Linux终端 3.3 安装ftp 3.4、Linux目录结构 4、Linux基本命令 4.1、关机与重启 4.2、文件与目录 4.3、日期与日历 4.4、帮助指令 4.5、…...

Haneke最佳实践:10个技巧让你的图片缓存更高效

Haneke最佳实践&#xff1a;10个技巧让你的图片缓存更高效 【免费下载链接】Haneke A lightweight zero-config image cache for iOS, in Objective-C. 项目地址: https://gitcode.com/gh_mirrors/ha/Haneke Haneke是一款适用于iOS平台的轻量级零配置图片缓存库&#xf…...

LabVIEW变量实战指南:从局部、全局到共享变量的高效数据流设计

1. 温度监控系统设计中的变量选择困境 第一次用LabVIEW做温度监控系统时&#xff0c;我在变量选择上栽过大跟头。当时为了图省事&#xff0c;把所有传感器数据都塞进了全局变量&#xff0c;结果系统运行半小时后就开始卡顿&#xff0c;报警响应延迟高达5秒——这对工业场景简直…...

从DDR到LPDDR:搞懂手机和电脑内存差异,看这一篇就够了(附选型避坑指南)

从DDR到LPDDR&#xff1a;全面解析移动与桌面内存的技术差异与选型策略 在智能设备性能爆发的时代&#xff0c;内存技术正经历着从"够用"到"极致优化"的转变。当工程师面对物联网终端需要0.5W超低功耗、游戏手机追求100GB/s带宽、自动驾驶系统要求纳秒级延…...