QT实现用户登录注册功能

本文实例为大家分享了QT实现用户登录注册的具体代码,供大家参考,具体内容如下

1、login.h

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#ifndef LOGIN_H

#define LOGIN_H

#include <QWidget>

namespace Ui {

class Login;

}

class Login : public QWidget

{

? ? Q_OBJECT

public:

? ? explicit Login(QWidget *parent = 0);

? ? ~Login();

private slots:

? ? void on_btn_login_clicked();

? ? void on_btn_register_clicked();

private:

? ? Ui::Login *ui;

};

#endif // WIDGET_H

2、login.cpp

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

#include "login.h"

#include "ui_login.h"

#include "register.h"

#include "mainwindow.h"

#include <QMessageBox>

#include <QSqlQuery>

#include <QFile>

#include <QDebug>

Login::Login(QWidget *parent) :

? ? QWidget(parent),

? ? ui(new Ui::Login)

{

? ? ui->setupUi(this);

? ? ui->ledit_password->setEchoMode(QLineEdit::Password);

}

Login::~Login()

{

? ? delete ui;

}

void Login::on_btn_login_clicked()

{

? ? QString username = ui->ledit_username->text();

? ? QString password = ui->ledit_password->text();

? ? if(username == "" ||password == ""){

? ? ? ? QMessageBox::information(this,"警告","输入不能为空",QMessageBox::Ok);

? ? }else{

? ? ? ? QSqlQuery query;

? ? ? ? query.prepare("select username,password from admin where username=:username and password = :password ");

? ? ? ? query.bindValue(":username", username);

? ? ? ? query.bindValue(":password", password);

? ? ? ? query.exec();

? ? ? ? if(!query.next())

? ? ? ? {

? ? ? ? ? ? //结果集为空

? ? ? ? ? ? //执行某操作

? ? ? ? ? ? QMessageBox::information(this,"警告","用户名或密码错误!",QMessageBox::Ok);

? ? ? ? }

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? QMessageBox::information(this,"提醒","登录成功!",QMessageBox::Ok);

? ? ? ? ? ? MainWindow *m = new MainWindow;

? ? ? ? ? ? m->show();

? ? ? ? ? ? this->close();

? ? ? ? }

? ? }

}

void Login::on_btn_register_clicked()

{

? ? Register *r = new Register;

? ? r->show();

}

3、register.h

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#ifndef REGISTER_H

#define REGISTER_H

#include <QWidget>

namespace Ui {

class Register;

}

class Register : public QWidget

{

? ? Q_OBJECT

public:

? ? explicit Register(QWidget *parent = 0);

? ? ~Register();

private slots:

? ? void on_btn_logon_clicked();

private:

? ? Ui::Register *ui;

};

#endif // REGISTER_H

4、register.cpp

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

#include "register.h"

#include "ui_register.h"

#include <QButtonGroup>

#include <QMessageBox>

#include <QRegExp>

#include <QSqlQuery>

Register::Register(QWidget *parent) :

? ? QWidget(parent),

? ? ui(new Ui::Register)

{

? ? ui->setupUi(this);

}

Register::~Register()

{

? ? delete ui;

}

void Register::on_btn_logon_clicked()

{

? ? QString username = ui->ledit_username->text();

? ? QString password = ui->ledit_pwd->text();

? ? QString name = ui->ledit_name->text();

? ? int age = ui->ledit_age->text().toInt();

? ? QButtonGroup *bg=new QButtonGroup(this);

? ? bg->addButton(ui->rbtn_male,0);//一个值为0

? ? bg->addButton(ui->rbtn_female,1);//一个值为1

? ? int sel=bg->checkedId();//取到你所选的radioButton的值

? ? QString gender;

? ? switch(sel)

? ? {

? ? case 0:

? ? ? gender="男";

? ? ? break;

? ? case 1:

? ? ? gender="女";

? ? ? break;

? ? default:

? ? ? gender="";

? ? break;

? ? }

? ? QSqlQuery query;

? ? query.prepare("select username from patient where username=:username");

? ? query.bindValue(":username", username);

? ? query.exec();

? ? if(query.next())

? ? {

? ? ? ? QMessageBox::information(this,"警告","用户名已存在!",QMessageBox::Ok);

? ? }

? ? else

? ? {

? ? ? ? query.prepare("insert into patient(username,password,patientName,age,gender)"

? ? ? ? ? ? ? ? ? ? ? "values(:username,:password,:patientName,:age,:gender)");

? ? ? ? query.bindValue(":username", username);

? ? ? ? query.bindValue(":password",password);

? ? ? ? query.bindValue(":patientName", name);

? ? ? ? query.bindValue(":age", age);

? ? ? ? query.bindValue(":gender", gender);

? ? ? ? query.exec();

? ? ? ? QMessageBox::information(this,"警告","注册成功!",QMessageBox::Ok);

? ? }

}

5、数据库连接代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

#ifndef CONNECTION

#define CONNECTION

#include <QSqlDatabase>

#include <QStringList>

#include <QString>

#include <QDebug>

#include <QSqlQuery>

#include <QMessageBox>

static bool createConnection()

{

? ? //测试用例:连接mysql数据库,做一个基本的sql语句操作

? ? //1、对qt下数据库的驱动进行遍历查看

? ? QStringList drivers = QSqlDatabase::drivers();

? ? foreach (QString driver, drivers) {

? ? ? ? qDebug()<<drivers;

? ? }

? ? //2、打开数据库过程

? ? QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

? ? //数据库连接的信息进行配置

? ? db.setHostName("localhost");//设置主机名(数据库所在电脑的名称)

? ? db.setDatabaseName("medical_system");//设置数据库名称

? ? db.setUserName("root");

? ? db.setPassword("123456");

? ? //db.setPort(3306);//因为是本机,该段代码可省略

? ? if(!db.open()){

? ? ? ? //打开失败的情况

? ? ? ? qDebug()<<"Failed to connect";

? ? ? ? //实际情况下我们应该使用图形化窗口提示打开失败

? ? ? ? QMessageBox::critical(0,"无法打开数据库","无法创建",QMessageBox::Yes);

? ? ? ? return false;

? ? }

? ? return true;

}

#endif // CONNECTION

运行结果

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

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

相关文章

全面防护!Fortinet发布混合式部署防火墙HMF

在企业IT复杂性日益增长、网络安全威胁日趋紧迫、网络安全设施可维护性逐渐降低的背景下&#xff0c;企业迫切寻求可无缝跨越所有IT区域&#xff0c;有效简化企业防护架构的统一解决方案。近日&#xff0c; Fortinet Accelerate 2023中国区15城巡展圆满落幕&#xff0c;在收官之…

【深度学习之YOLO8】视频流推断

官方V8模型下载 需要准备两个东西 simsun.ttc字体包YOLOv8官方模型成品 ScreenCapture屏幕图像类 import cv2 import mss import numpy as npclass ScreenCapture:"""parameters----------screen_resolution : Tuple[int, int]屏幕宽高&#xff0c;分别为x&a…

【文献分享】比目前最先进的模型轻30%!高效多机器人SLAM蒸馏描述符!

论文题目&#xff1a;Descriptor Distillation for Efficient Multi-Robot SLAM 中文题目&#xff1a;高效多机器人SLAM蒸馏描述符 作者&#xff1a;Xiyue Guo, Junjie Hu, Hujun Bao and Guofeng Zhang 作者机构&#xff1a;浙江大学CAD&CG国家重点实验室 香港中文大学…

Vue系列第四篇:Vue2 + Element开发登录页面

Vue开发中Element是一个比较受欢迎的界面库&#xff0c;实际开发中Vue2搭配Element UI开发&#xff0c;Vue3搭配Element plus开发&#xff0c;今天就用Vue2 Element来开发登录页面。 目录 1.Element UI介绍 1.1官网 1.2element-ui安装 2.开发环境准备 2.1core-js安装 2…

List集合类详解(附加思维导图)

目录 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 2.2、LinkedList集合常用方法 一、List集合思维导图 二、List集合类的常见方法 2.1、ArrayList集合常用方法 ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中…

xxljob

调度中心&#xff1a; 下载调度中心的代码 下载sql&#xff0c;执行sql 更改配置 启动项目 输入地址即可访问界面 执行器&#xff1a; 新建springboot的项目&#xff0c;导入相关依赖 添加和执行器的配置 上面的就是读取配置文件的信息 把从配置文件获取的值set到对…

家政服务小程序制作攻略揭秘

想要打造一个家政服务小程序&#xff0c;但是又不懂编程和设计&#xff1f;不用担心&#xff01;下面将为你详细介绍如何利用第三方平台&#xff0c;从零开始打造一个家政服务小程序。 首先&#xff0c;你需要找到一个适合的第三方平台&#xff0c;例如乔拓云网。在乔拓云网的【…

Rman配置参数详解

using target database control file instead of recovery catalog指的是使用目标数据库控制文件代替恢复目录 1、CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default 设置rman备份过期条件&#xff1a;是用来决定那些备份不再需要了&#xff0c;它一共有三种可选项&…

进销存+小程序商城一体化,多门店管理解决方案-免费试用|亿发

为了适应市场变化和增强管理效率&#xff0c;越来越多的连锁&#xff0c;门店开始转向进销存小程序商城一体化&#xff0c;将进销存与订货商城结合&#xff0c;以实现更便捷、有效的经营模式&#xff0c;让企业迈向数字化时代。让我们一起来看看进销存小程序商城一体化系统相比…

MySQL索引失效原因及解决方案

MySQL索引失效原因及解决方案 在使用MySQL数据库时&#xff0c;索引是一种重要的性能优化工具。然而&#xff0c;有时候我们可能会遇到索引失效的情况。本文将介绍几种常见的MySQL索引失效原因以及相应的解决方案&#xff0c;并提供SQL语句的错误示例和正确示例。 1. 字符串字…

文本预处理——文本数据分析

目录 文本数据分析中文酒店评价语料获得训练集和验证集的标签数量分布获取训练集和验证集的句子长度分布获取训练集和验证集的正负样本长度散点分布获得训练集和验证集不同词汇总数统计获得训练集上正负的样本的高频形容词词云获得验证集上正负的样本的形容词词云 文本数据分析…

如何在APP开发中实现多平台兼容?

随着移动互联网的发展&#xff0c;各大 APP平台也如雨后春笋般崛起&#xff0c;现在市面上主流的 APP平台基本都已经支持 IOS、 Android、 WP等多个平台的开发&#xff0c;但对于一些只想专注于做一款 APP的企业来说&#xff0c;往往只能选择在一个平台开发一个 APP&#xff0c…

Kubernetes ConfigMap - Secret - 使用ConfigMap来配置 Redis

目录 ConfigMap &#xff1a; 参考文档&#xff1a;k8s -- ConfigMap - 简书 (jianshu.com) K8S ConfigMap使用 - 知乎 (zhihu.com) ConfigMap的作用类型&#xff1a; 可以作为卷的数据来源&#xff1a;使用 ConfigMap 来配置 Redis | Kubernetes 可以基于文件创建 Conf…

华为数通HCIP-ISIS高级

isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递&#xff0c;到达L1-2路由器时&#xff0c;L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递&#xff1b; 因此L2区域的设备可以学习到L1区域的明细路由&#xff0c;进行访问&#xff1b;…

linux的一些基本指令第二期

rm rm -r 你要删除的目录名 加了-r 之后表示递归删除你要删除的目录 使用这个命名之后&#xff0c;他会一边递归到叶子节点&#xff0c;一边询问你是否要删除&#xff0c;然后会递归回来&#xff0c;在回来的途中删除&#xff1a; rm -rf 你要删除的目录名 强制执行删除操作…

c++类和对象(拷贝构造、运算符重载、初始化列表、静态成员、友元等)

一、拷贝构造 拷贝构造函数的特征&#xff1a; 1、拷贝构造函数是构造函数的一个重载形式&#xff1b; 2、拷贝构造函数的参数只有一个且必须是同类类型对象的引用&#xff0c;使用传值方式编译器直接报错&#xff0c;因为会引发无穷递归调用。 在c中自定义类型传值传参的时…

微信批量删除好友怎么删除

微信好友太多想要批量删除不知道怎么删除&#xff0c;相信这个问题也困扰了不少人。那么怎样才能批量的删除微信好友&#xff1f;其实不难&#xff0c;可以通过新建标签删除的方式来实现批量删除好友。 怎么批量删除 微信批量删除好友的具体步骤如下&#xff1a; 1、新建标签 首…

CC1310F128系列 超低功耗低于1GHz射频 微控制器芯片

CC1310F128 是一款经济高效型超低功耗低于1GHz射频器件&#xff0c;凭借极低的有源射频和MCU电流消耗以及灵活的低功耗模式&#xff0c;CC1310F128可确保卓越的电池寿命&#xff0c;并能够在小型纽扣电池供电的情况下以及在能量采集应用中实现远距离工作。 改芯片有三个后缀&am…

【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图

本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…

第2章 逻辑分页、AutoFac注入、工作单元与仓储

1 CoreCms.Net.Model.ViewModels.Basics.IPageList<T> namespace CoreCms.Net.Model.ViewModels.Basics { ///<typeparam name"T">泛型类型实例(1个指定实体的类型实例)。</typeparam> /// <summary> /// 【逻辑分页列表--接口】 /// <…