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

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

springboot 百货中心供应链管理系统小程序

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

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...