QT实现用户登录注册功能

news2024/11/18 1:27:03

本文实例为大家分享了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.coloradmin.cn/o/788916.html

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

相关文章

git pull无效,显示 * branch master -> FETCH_HEADAlready up to date. pull无效解决方法

报错情况 本地文件夹中删除文件后&#xff0c;git pull无效。显示如下&#xff1a; **** MINGW64 ~/****/haha (master) $ git pull origin master From https://gitee.com/****/haha* branch master -> FETCH_HEAD Already up to date.解决 方法一 命令…

C++ —— STL容器【vector】模拟实现

本章代码gitee仓库&#xff1a;vector模拟实现、vector源码 文章目录 &#x1f608;0. 搭个框架&#x1f604;1. 成员&#x1f47b;2. 构造函数 & 析构函数 & 拷贝构造&#x1f63a;3. 迭代器&#x1f649;4. operator[] & operator&#x1f916;5. 容器的容量 &am…

Vue mixin 混入

可以复用的组件&#xff0c;我们一般会抽离&#xff0c;写成公共的模块。 可以复用的方法&#xff0c;我们一般会抽离&#xff0c;写成公共的函数。 那么 在 Vue 中&#xff0c;如果 某几个组件实例 VueComponent 中、或者 整个 Vue 项目中 都存在相同的配置&#xff0c;那就…

jmeter-断言

断言作用&#xff1a;让脚本自动化执行过程中&#xff0c;能够自动判定执行结果是否正确&#xff0c;需要添加断言 响应断言 添加方式&#xff1a;测试计划–》线程组–》HTTP请求–》(右键添加)断言–》响应断言 案例 请求:https://www.baidu.com 检查&#xff1a;让程序检查…

13.4 【Linux】使用者身份切换

使用一般帐号&#xff1a;系统平日操作的好习惯 尽量以一般身份使用者来操作Linux的日常作业。等到需要设置系统环境时&#xff0c; 才变换身份成为 root 来进行系统管理&#xff0c;相对比较安全。避免作错一些严重的指令&#xff0c;例如恐怖的“ rm -rf / ”。 用较低权限…

OpenTDF数据加密引擎

OpenTDF是Virtru公司的开源项目。 Virtru基于OpenTDF开发了用于google Workspace和Microsoft 365的相关数据安全产品。 简介 virtru公司基于opentdf开发挺多产品的,都是数据安全类产品。 能把opentdf开源,已经非常不容易了。 opentdf的代码看起来还是比较整齐和成熟的。…

flink写入到kafka 大坑解析。

1.kafka能不能发送null消息&#xff1f; 能&#xff01; 2 flink能不能发送null消息到kafka&#xff1f; 不能&#xff01; public static void main(String[] args) throws Exception {StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment(…

mysql 第九章

目录 1.mha 搭建 2.总结 1.mha 搭建 主从同步&#xff1a; 安装 mha 软件&#xff1a; mha 模拟 vip 飘移、master 切换&#xff1a; 2.总结 mha 是一套优秀的 mysql 高可用环境下故障切换和主从复制的软件。mha 解决 mysql 单点的问题。mysql 故障切换过程中&#xff0c;mh…

Linux 学习记录57(ARM篇)

Linux 学习记录57(ARM篇) 本文目录 Linux 学习记录57(ARM篇)一、外部中断1. 概念2. 流程图框 二、相关寄存器1. GIC CPU Interface (GICC)2. GIC distributor (GICD)3. EXTI registers 三、EXTI 寄存器1. 概述2. 内部框图3. 寄存器功能描述4. EXTI选择框图5. EXTI_EXTICR1 &…

Qt Creator mainwindow.obj:-1: error: LNK2019

构建的时候报错&#xff1a; mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 "public: __thiscall mynotedig::mynotedig(class QWidget *)" (??0mynotedigQAEPAVQWidgetZ)&#xff0c;该符号在函数 "public: void __thiscall MainWindow::mynoteab…

C语言宏替换的注意事项

先思考一个问题&#xff1a; #include <string> #include <Windows.h>namespace ui { int MessageBox(HWND hwnd, const std::wstring &text, const std::wstring &caption,UINT flags) {UINT actual_flags flags;const wchar_t *text_ptr text.c_str();…

推荐 3 个实用的 GitHub 项目

本期推荐开源项目目录&#xff1a; 1. 开源知识库 2. 去中心化的社交平台 3. h2oGPT 01 开源知识库 AFFINE 是 Notion、Miro 等知识库产品的开源替代品&#xff0c;目前已经获得了近 20k 的 Stark。通过 AFFINE 你可以进行写作、绘画、计划管理。 类似于 Notion 的 Block &…

STC12C5A系列单片机片内看门狗的应用

wdt.c #include "wdt.h"void wdt_init(void) {WDT_CONTR 0x24; // 0010 0100 - 1.1377s }void wdt_feed(void) {WDT_CONTR | 0x10; // 喂狗 }wdt.h #ifndef _WDT_H_ #define _WDT_H_#include "stc12c5a60s2.h"// 函数声明 extern void wdt_init(void); …

Ajax 黑马学习

Ajax 资源 数据是服务器对外提供的资源,通过 请求 - 处理 - 响应方式获取 请求服务器数据, 用到 XMLHttpRequest 对象 XMLHttpRequest 是浏览器提供的js成员, 通过它可以请求服务器上的数据资源 let xmlHttpRequest new XMLHttpRequest(); 请求方式 : get向服务器获取数据…

requests---jsonpath在接口自动化中的应用

前言 我们在做接口测试时&#xff0c;大多数返回的都是json属性&#xff0c;我们需要通过接口返回的json提取出来对应的值&#xff0c;然后进行做断言或者提取想要的值供下一个接口进行使用&#xff0c;但是如果返回的json数据嵌套了很多层&#xff0c;通过查找需要的词&#x…

软件进行用户体验测试有哪些要点?

无论是移动应用还是网页应用&#xff0c;优秀的用户体验是软件成功的关键所在。软件用户体验测试是一种关键的测试方法&#xff0c;旨在评估用户在使用软件过程中的感受和体验。通过深入了解用户需求&#xff0c;模拟真实场景&#xff0c;以及综合用户反馈&#xff0c;软件开发…

【C++】C++11——右值引用和移动语义|可变参数模板

文章目录 一、左值引用和右值引用左值引用和右值引用的定义左值引用和右值引用的比较 二、右值引用的使用场景和意义左值引用的短板移动构造和移动赋值万能引用和完美转发 三、新的类功能类成员变量初始化default 和 delete 四、可变参数模板 一、左值引用和右值引用 传统的C语…

操作系统资源限制问题(Memory Analyzer使用OutOfMemoryError)

java8使用Memory Analyzer大概是10左右的版本&#xff0c;用最新版本要java17 MemoryAnalyzer-1.10.0.20200225-win32.win32.x86_64 MAT(Memory Analyzer Tool)下载 https://www.cnblogs.com/zwh0910/p/15774590.html Eclipse downloads - Select a mirror | The Eclipse F…

"科技与狠活"企业级无代码开发MES系统,一周实现数字化

随着科技的不断发展&#xff0c;企业级无代码开发平台成为了一种新型的解决方案&#xff0c;能够有效降低软件开发门槛&#xff0c;提升开发效率。在制造业领域&#xff0c;MES系统&#xff08;Manufacturing Execution System&#xff09;作为一种关键的生产管理工具&#xff…

小程序开发收费多少

一、小程序开发费用一览表 ① 域名费用 域名的价格取决于选择的域名类型&#xff0c;常见的有如.com、.cn等这些&#xff0c;以及注册商的定价策略。比如&#xff0c;一个.com 域名一年的的注册费用大约在 50-200 元人民币之间。 ②服务器费用 服务器费用是根据服务器的配置…