QT 小项目:登录注册账号和忘记密码(下一章实现远程登录)

一、环境搭建
参考上一章环境
二、项目工程目录
在这里插入图片描述
三、主要源程序如下:
registeraccountwindow.cpp
窗口初始化:

void registeraccountWindow::reginit()
{//去掉?号this->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);//更改名称this->setWindowTitle("register");//更换左上角图标this->setWindowIcon(QIcon(":/image/logol.png"));//生成窗口图标//禁止改变窗口大小 固定大小this->setFixedSize(408,270);//设置样式ui->lineEdit_registeraccount->setStyleSheet("QLineEdit{border-width:1px;border-radius:4px;font-size:12px;color:black;border:1px solid gray;}""QLineEdit:hover{border-width:1px;border-radius:4px;font-size:16px;color:black;border:1px solid rgb(204,38,200);}");//边框宽度 边框圆角 字体大小 ...   选中边框颜色ui->lineEdit_registerpassword->setStyleSheet("QLineEdit{border-width:1px;border-radius:4px;font-size:12px;color:black;border:1px solid gray;}""QLineEdit:hover{border-width:1px;border-radius:4px;font-size:12px;color:black;border:1px solid rgb(70,200,50);}");ui->lineEdit_regosterpassword_ok->setStyleSheet("QLineEdit{border-width:1px;border-radius:4px;font-size:12px;color:black;border:1px solid gray;}""QLineEdit:hover{border-width:1px;border-radius:4px;font-size:12px;color:black;border:1px solid rgb(0,18,154);}");//设置密码框-密文登录ui->lineEdit_registerpassword->setEchoMode(QLineEdit::Password);ui->lineEdit_regosterpassword_ok->setEchoMode(QLineEdit::Password);//密码的隐藏和显示// 设置样式表(图片为眼睛样式)ui->checkBox_eye1->setStyleSheet("QCheckBox {spacing: 5px;border: none;background-color: transparent;}""QCheckBox::indicator {width: 20px;height: 20px;border: none;image: url(:/image/close_eye.png);}""QCheckBox::indicator:checked {image: url(:/image/open_eye.png);}");ui->checkBox_eye2->setStyleSheet("QCheckBox {spacing: 5px;border: none;background-color: transparent;}""QCheckBox::indicator {width: 20px;height: 20px;border: none;image: url(:/image/close_eye.png);}""QCheckBox::indicator:checked {image: url(:/image/open_eye.png);}");//提示信息ui->lineEdit_registeraccount->setPlaceholderText("请输入设置的用户名 格式10位以内的数字");ui->lineEdit_registerpassword->setPlaceholderText("请输入设置的密码 格式15位以内的数字") ;ui->lineEdit_regosterpassword_ok->setPlaceholderText("请再次输入设置的密码 格式15位以内的数字");ui->lineEdit_checkcode->setPlaceholderText("请输入验证码");//返回主界面按钮样式  背景透明等ui->pushButton_back->setStyleSheet("QPushButton {""  background-color: transparent;""  border: none;""  color:rgb(255, 255, 255)""}""QPushButton:hover{color:rgb(15, 23, 253)}""QPushButton:pressed{color:rgb(255, 44, 221)}");//验证码按键样式ui->pushButton_checkcode->setStyleSheet("QPushButton {""  background-color: transparent;""  border: none;""}""QPushButton:pressed { background-color: none; }"  // 移除按键被按下时的视觉效果"QPushButton:hover { background-color: none; }"   // 移除鼠标悬停时的视觉效果);//获取验证码m_captcha = getCaptcha();//生成随机颜色m_color = generateRandomColor();}

返回登录页面:

void registeraccountWindow::on_pushButton_back_clicked()
{this->close();lo->show();
}

注册按钮及其相关函数:

void registeraccountWindow::on_pushButton_register_clicked()
{lo->connent_mysql();//获取内容QString reg_account = ui->lineEdit_registeraccount->text();QString reg_password = ui->lineEdit_registerpassword->text();QString reg_password_ok = ui->lineEdit_regosterpassword_ok->text();QString check_code = ui->lineEdit_checkcode->text().replace(" "," ");//去除空格QSqlQuery query;//查询数据库的所有账户 避免重复QString qs_temp = QString("select * from os_user where account = '%1'").arg(reg_account);
//    qDebug() << query.next();query.exec(qs_temp);if(query.next()){          //获取查询结果集QMessageBox::information(this,"注册","账号已经被注册");}else{if(reg_password_ok==reg_password)  //两次输入的密码一致{if(check_code.toLower() == m_captcha.toLower())  //用户输入的验证码与生成的验证码比较{QString qs = QString("insert into os_user(account,pwd)""values(%1, %2)").arg(reg_account).arg(reg_password);if(!query.exec(qs)){          //获取查询结果集QMessageBox::information(this,"注册","注册失败");}else{QMessageBox::information(this,"注册","注册成功");}}else{QMessageBox::warning(this, "Warning", "验证码输入错误");}}else{QMessageBox::warning(this, "Warning", "两次输入的密码不一致");}}
}QColor registeraccountWindow::generateRandomColor()
{int red = QRandomGenerator::global()->bounded(256);// 生成0到255之间的随机整数作为红色通道的值int green = QRandomGenerator::global()->bounded(256);// 生成0到255之间的随机整数作为绿色通道的值int blue = QRandomGenerator::global()->bounded(256);// 生成0到255之间的随机整数作为蓝色通道的值return QColor(red, green, blue);// 使用生成的RGB值创建并返回一个QColor对象}
void registeraccountWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);//直接绘制在该窗口上// 填充背景为白色painter.fillRect(ui->label_checkcode->x()+ui->widget->x(), ui->label_checkcode->y()+ui->widget->y(), ui->label_checkcode->width(), ui->label_checkcode->height(), Qt::white);// 设置字体样式painter.setFont(QFont("Lucida Console", 18,QFont::Bold));// 绘制验证码字符for(int i = 0; i < 4; i++){QColor color = generateRandomColor();// 生成随机颜色QPen pen(color);pen.setWidth(1);  //画笔宽度painter.setPen(pen);//相当于将画笔交给画家painter.drawText(ui->label_checkcode->x() +ui->widget->x()+ 30*i, ui->label_checkcode->y()+ui->widget->y(), 30, ui->label_checkcode->height(), Qt::AlignCenter,QString(m_captcha[i]));//1,2,3,4绘制文本的矩形区域 文本的对齐方式 文本内容// 绘制验证码字符}// 绘制噪点for(int i=0; i<1500; i++){QColor color = generateRandomColor();// 生成随机颜色QPen pen(color);pen.setWidth(1);painter.setPen(pen);painter.drawPoint(ui->label_checkcode->x()+ui->widget->x()+ (qrand() % ui->label_checkcode->width()), ui->label_checkcode->y()+ui->widget->y() + (qrand() % ui->label_checkcode->height()));//保证随机数的坐标在矩形区域内}//           // 绘制干扰线
//           for(int i = 0;i < 10;++i)
//           {
//               painter.drawLine(ui->label_checkcode->x()+ui->widget->x()+qrand()%ui->label_checkcode->width(),ui->label_checkcode->y()+ui->widget->y()+qrand()%ui->label_checkcode->height(),
//                                ui->label_checkcode->x()+ui->widget->x()+qrand()%ui->label_checkcode->width(),ui->label_checkcode->y()+ui->widget->y()+qrand()%ui->label_checkcode->height());
//           }}QString registeraccountWindow::getCaptcha()
{const QString possibleCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";const int captchaLength = 4;QString result = "";// 生成验证码字符串for (int i = 0; i < captchaLength; ++i) {   //控制生成4位的字符串int index = QRandomGenerator::global()->bounded(possibleCharacters.length());  //QRandomGenerator随机数生成器 QRandomGenerator::global()指针变量 返回创建的随机数指针 bounded(给定随机数生成的范围)// 生成一个0到possibleCharacters长度之间的随机整数result.append(possibleCharacters.at(index));// 将随机位置的字符添加到结果字符串中}return result; // 返回生成的验证码字符串}

registeraccontwindow.h

#ifndef REGISTERACCOUNTWINDOW_H
#define REGISTERACCOUNTWINDOW_H
#include "login.h"
#include <QDialog>namespace Ui {
class registeraccountWindow;
}class registeraccountWindow : public QDialog
{Q_OBJECTpublic:explicit registeraccountWindow(QWidget *parent = nullptr);~registeraccountWindow();QString m_captcha;QColor m_color;login *lo = new login;void reginit();void paintEvent(QPaintEvent *event);QColor generateRandomColor();QString getCaptcha();private slots:void on_pushButton_back_clicked();void on_pushButton_register_clicked();void on_pushButton_checkcode_clicked();void on_checkBox_eye1_stateChanged(int arg1);void on_checkBox_eye2_stateChanged(int arg1);private:Ui::registeraccountWindow *ui;
};#endif // REGISTERACCOUNTWINDOW_H

forgetpasswordwindow.cpp

修改密码功能:

void forgetpasswordwindow::on_pushButton_forget_clicked()
{lo_forget->connent_mysql();//获取内容QString forget_account = ui->lineEdit_forgetaccount->text();QString forget_password = ui->lineEdit_forgetpassword->text();QSqlQuery query;//查询数据库的所有账户 是否有该账号QString qs = QString("select * from os_user where account = '%1'").arg(forget_account);query.exec(qs);//执行SQL语句if(query.next()){          //获取查询结果集QString qs = QString("UPDATE os_user SET pwd = '%1' WHERE account = '%2'" ).arg(forget_password).arg(forget_account);query.exec(qs);//执行SQL语句if(!query.exec(qs)){QMessageBox::information(this,"修改","修改密码失败");}elseQMessageBox::information(this,"修改","修改密码成功");}else{QMessageBox::information(this,"修改","该账号不存在");}
}

四、实现效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:点击验证码的位置即可刷新验证码

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/688112.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识指针(4)<C语言>

前言 前面的文章&#xff0c;已经对指针的基础概念以及运用有了初步了解&#xff0c;我们可以进一步探究指针比较深入的知识&#xff0c;下文将主要介绍&#xff1a;使用指针数组模拟二维数组、字符指针变量、数组指针、二维数组传参的本质、函数指针、typedef关键字等。 目录…

怎么让电脑耳机和音响都有声音

电脑耳机音响不能同时用没声音怎么办 一般来说&#xff0c;重新开机后问题能够得到解决。右击“我的电脑”---“属性”---“硬件”---“设备管理器”&#xff0c;打开“声音、视频和游戏控制器”有无问题&#xff0c;即看前面有没有出现黄色的“”。 如果您的 电脑 耳机能正常…

【MsSQL】数据库基础 库的基本操作

目录 一&#xff0c;数据库基础 1&#xff0c;什么是数据库 2&#xff0c;主流的数据库 3&#xff0c;连接服务器 4&#xff0c;服务器&#xff0c;数据库&#xff0c;表关系 5&#xff0c;使用案例 二&#xff0c;库的操作 1&#xff0c;创建数据库 2&#xff0c;创建…

数据结构与算法学习笔记六-二叉树的顺序存储表示法和实现(C语言)

目录 前言 1.数组和结构体相关的一些知识 1.数组 2.结构体数组 3.递归遍历数组 2.二叉树的顺序存储表示法和实现 1.定义 2.初始化 3.先序遍历二叉树 4.中序遍历二叉树 5.后序遍历二叉树 6.完整代码 前言 二叉树的非递归的表示和实现。 1.数组和结构体相关的一些知…

PyQt5中的组件

文章目录 1. 简介2. QCheckBox3. QPushButton4. QSlider5. QProgressBar6. QCalendarWidget7. QPixmap8. QLineEdit9. QSplitter10. QComboBox11. 总结 1. 简介 在PyQt5中&#xff0c;有许多不同类型的组件&#xff0c;可以用于构建各种GUI界面。以下是一些常见的PyQt5组件&am…

NSSCTF中的web学习(md5())

目录 MD5的学习 [BJDCTF 2020]easy_md5 [LitCTF 2023]Follow me and hack me [LitCTF 2023]Ping [SWPUCTF 2021 新生赛]easyupload3.0 [NSSCTF 2022 Spring Recruit]babyphp MD5的学习 md5()函数&#xff1a; md5($a)&#xff1a;返回a字符串的散列值 md5($a,TRUE)&…

地科前沿|AI与GIS的融合

AI与GIS的融合&#xff1a;推动地理信息科技的创新 人工智能&#xff08;AI&#xff09;与地理信息系统&#xff08;GIS&#xff09;的结合&#xff0c;形成了一种强大的合作关系&#xff0c;为科学、技术和社会领域带来了深刻的变革。这种融合不仅为地理空间数据的处理提供了更…

十大排序算法(java实现)

注&#xff1a;本篇仅用来自己学习&#xff0c;大量内容来自菜鸟教程&#xff08;地址&#xff1a;1.0 十大经典排序算法 | 菜鸟教程&#xff09; 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大…

Java——类与对象

目录 一、面向对象的初步认识 1.1 什么是面向对象 1.2 面向对象与面向过程 二、类的定义与使用 2.1 简单认识类 2.2 类的定义格式 三、类的实例化 3.1 什么是实例化 3.2 类和对象的说明 四、this引用 4.1 为什么要有this引用 4.2 什么是this引用 ​编辑 4.3 this引用…

Google console 带包 号

https://play.google.com/store/apps/details?idcom.winmoney.moneyincome 懂的 来tg goomoni

【redis】Redis五种常用数据类型和内部编码,以及对String字符串类型的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

在线教程|图灵奖得主Yann LeCun盛赞!小红书开源InstantID,一张原图即可定制多种风格写真

不久前&#xff0c;一群来自小红书的 95 后工程师联合北大团队发布了开源项目「InstantID」&#xff0c;只需上传一张照片&#xff0c;这款 AI 写真神器就能轻松定制多种风格的 AI 写真&#xff0c;告别繁琐修图。 InstantID 一经发布就引起了广泛关注&#xff0c;GitHub 收藏量…