热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

qt学习(六)数据库注册用户的实现方法

本文介绍了在qt学习中实现数据库注册用户的方法,包括登录按钮按下后出现注册页面、账号可用性判断、密码格式判断、邮箱格式判断等步骤。具体实现过程包括UI设计、数据库的创建和各个模块调用数据内容。

  做什么:

1 登陆按钮按下出现注册页面,

2 输入账号  判断是否可用   查询数据库,用户名是否已经注册

3 输入密码  判断密码格式

4 输入邮箱  判断邮箱格式   查询数据库,邮箱是否已经注册

 

做成什么样:

《qt 学习(六) 数据库注册用户》

 

 

《qt 学习(六) 数据库注册用户》

 

怎么做:

大体是这样的:

1画ui

2 lineedit 那一栏选择信号槽,发texted信号

3 创建数据库

4 编辑槽里的判断函数

 

具体是这样:

1 ui设计

《qt 学习(六) 数据库注册用户》

 

2 数据库放在widget。h的头文件中, 方便系统各个模块调用数据内容。

下面创建数据库

调用数据库需要的头文件

#include

#include

#include

 

创建数据库

QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);

给库命名

db.setDatabaseName(“mayplestory.db”);

 

插入表项

query.exec(QObject::tr(“create table mayplestory(id interger, name varchar(20), password varchar(20), email varchar(20));”));

数据库的模型就有了,下面就是配合ui lineEdit 进行相应的增加数据的内容, 不难的,只是有点繁琐。

 

我在学的时候遇到了一下几个问题

1 上次写的是在main函数中调用需要生成的界面,结果误认为不管谁要显示都要在main函数中创建该对象,再   对象.show()。以为login不能再显示新login。

谁调用谁建立对象:

这是完成regist  注册功能,在login对话框中

所以在login。cpp中加入registe。h 的头文件,就可以在login中创建有注册功能的对象了。

void loginDlg::on_registButton_clicked()

{

Regist w; w.exec();//谁调用就在谁处实现, login调用regist 就在 login处实现显示。

}

 

2 数据库初始为空时,用while(query.next()) 判断是否用户输入的用户名,在数据库中是否已有  结果query。next一开始就空下面的判断没有一个执行的,所以我少判断了初始为空的条件

         if(query.first() == NULL)  //数据库内容初始为空时

{

}

else

{

query.previous();//这一句很重要,不然判断还是有问题。

while(query.next()) //指向第一个

 

3 显示检测对话框的颜色不知道怎么设置, 问了网友才知道可以这样

           ui->checkBox_3->setStyleSheet(“color:green”); //字体变绿色

 

正则表达式没见过还得好好学习下, 邮箱的格式检测要用到

           http://www.jb51.net/tools/zhengze.html

邮箱格式是:

regex pattern("([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)");
// 正则表达式,匹配规则:
// 第1组(即用户名),匹配规则:0至9、A至Z、a至z、下划线、点、连字符之中
// 的任意字符,重复一遍或以上(+ 表示重复1次以上)
// 中间,一个“@”符号
// 第二组(即域名),匹配规则:0至9或a至z之中的任意字符重复一遍或以上,
// 接着一个点,接着a至z之中的任意字符重复2至3遍(如com或cn等),
// 第二组内部的一组,一个点,接着a至z之中的任意字符重复2遍(如cn或fr等)
// 内部一整组重复零次或一次
代码 :
。h

《qt 学习(六) 数据库注册用户》
《qt 学习(六) 数据库注册用户》

1 #ifndef CONNECTION_H
2 #define CONNECTION_H
3
4 #include
5
6 namespace Ui {
7 class loginDlg;
8 }
9
10 class loginDlg : public QDialog
11 {
12 Q_OBJECT
13
14 public:
15 explicit loginDlg(QWidget *parent = 0);
16 ~loginDlg();
17
18 private slots:
19 void on_loginBtn_clicked();
20 void on_registButton_clicked();
21
22
23 private:
24 Ui::loginDlg *ui;
25
26 };
27
28
29 #endif // LOGINDLG_H

View Code
《qt 学习(六) 数据库注册用户》
《qt 学习(六) 数据库注册用户》

1 #ifndef REGIST_H
2 #define REGIST_H
3
4 #include
5 #include
6 namespace Ui {
7 class Regist;
8 }
9
10 class Regist : public QDialog
11 {
12 Q_OBJECT
13
14 public:
15 explicit Regist(QWidget *parent = 0);
16 ~Regist();
17
18 private slots:
19
20 void on_sureButton_clicked();
21
22
23
24
25
26 void on_userEdit_textEdited(const QString &arg1);
27
28 void on_passwordEdit_textEdited(const QString &arg1);
29
30 void on_checkPasswordEdit_textEdited(const QString &arg1);
31
32 void on_emailEdit_textEdited(const QString &arg1);
33
34 private:
35 Ui::Regist *ui;
36 };
37
38 #endif // REGIST_H

View Code
《qt 学习(六) 数据库注册用户》
《qt 学习(六) 数据库注册用户》

1 #ifndef WIDGET_H
2 #define WIDGET_H
3
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 static bool createConnection()
12 {
13 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
14 db.setDatabaseName("mayplestory.db");
15 if(!db.open())
16 {
17 QMessageBox::critical(0,qApp->tr("Cannot open database"),qApp->tr("unable to estabilished a database connection"),QMessageBox::Cancel);
18 return false;
19 }
20
21
22 qDebug() <<"created begin";
23 QSqlQuery query;
24 query.exec(QObject::tr("create table mayplestory(id interger, name varchar(20), password varchar(20), email varchar(20));"));
25 //query.exec(QObject::tr("insert into mayplestory values(0,'yuyuyu','123456');"));
26
27
28 // query.exec("select *from information");
29 qDebug() <<"created end" ;
30 return true;
31
32 }
33 namespace Ui {
34 class Widget;
35 }
36
37 class Widget : public QWidget
38 {
39 Q_OBJECT
40
41 public:
42 explicit Widget(QWidget *parent = 0);
43 ~Widget();
44
45 private:
46 Ui::Widget *ui;
47 QSqlDatabase db;
48
49 };
50
51
52 #endif // WIDGET_H

View Code
。cpp
《qt 学习(六) 数据库注册用户》
《qt 学习(六) 数据库注册用户》

1 #include "logindlg.h"
2 #include "ui_logindlg.h"
3 #include
4 #include "widget.h"
5 #include "regist.h"
6
7
8 loginDlg::loginDlg(QWidget *parent) :
9 QDialog(parent),
10 ui(new Ui::loginDlg)
11 {
12
13 ui->setupUi(this);
14 ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
15 //ui->pushButton->setFlat(true);
16 QObject::connect(ui->registButtton,SIGNAL(clicked()),this,SLOT(on_registButton_clicked()));
17 }
18
19
20 loginDlg::~loginDlg()
21 {
22 delete ui;
23 }
24
25 void loginDlg::on_loginBtn_clicked()//登陆界面函数
26 {
27
28 QSqlQuery query;
29 query.exec(QObject::tr("select * from mayplestory;"));
30
31 while(query.next())
32 {
33
34 if(ui-> usrLineEdit->text().trimmed() == query.value(1)&& ui-> pwdLineEdit->text() == query.value(2) )
35 {
36 accept();
37 break;
38 }//比对数据库,ok进入主窗口
39 if (query.next() == NULL)
40 {
41 QMessageBox::warning(this,tr("Warning"),tr("user name or password error !!!"),QMessageBox::Yes);
42 ui->usrLineEdit->clear();
43 ui->pwdLineEdit->clear();
44 ui->usrLineEdit->setFocus();
45 }
46
47 }
48
49 }
50
51 void loginDlg::on_registButton_clicked()
52 {
53
54 Regist w;
55 w.exec();//谁调用就在谁处实现, login调用regist 就在 login处实现显示。
56
57 }

View Code
《qt 学习(六) 数据库注册用户》
《qt 学习(六) 数据库注册用户》

1 #include
2 #include
3 #include "widget.h"
4 #include "logindlg.h"
5 #include "regist.h"
6
7 int main(int argc, char *argv[])
8 {
9 QApplication a(argc, argv);
10 QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb2312"));
11 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb2312"));
12 QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312"));
13 Widget w;
14
15 loginDlg login; //登陆窗口对象
16 if(!createConnection())
17 qDebug()<<"unconnect";
18 else
19 qDebug()<<"connect";
20 login.show();
21 //Regist x;
22 // x.show();
23 if(login.exec() == QDialog::Accepted)
24 {
25 w.show(); //通过后的主窗口
26 return a.exec();
27 }
28 else return 0;
29
30
31 }

View Code
《qt 学习(六) 数据库注册用户》
《qt 学习(六) 数据库注册用户》

1 #include "regist.h"
2 #include "ui_regist.h"
3 #include "widget.h"
4 #include
5 #include
6 Regist::Regist(QWidget *parent) :
7 QDialog(parent),
8 ui(new Ui::Regist)
9 {
10 ui->setupUi(this);
11
12 }
13
14 Regist::~Regist()
15 {
16 delete ui;
17 }
18 int number = 0;
19 QString insert = "0000";
20 QString value1;
21 QString value2;
22 QString value3;
23
24 void Regist::on_sureButton_clicked()
25 {
26 QString exam = "1111";
27 if(exam == insert)
28 {
29 qDebug() <<"regest now";
30 qDebug() <<"1" <endl;
31 qDebug() <<"2" <endl;
32 qDebug() <<"3" <endl;
33
34 QSqlQuery query;//
35 query.exec(QObject::tr("insert into mayplestory(id,name,password,email)values('%1','%2','%3','%4')").arg(number).arg(value1).arg(value2).arg(value3));
36 number++;
37 }
38 else
39 {
40 qDebug() <<"regest can't";
41 }
42 }
43
44
45
46 void Regist::on_userEdit_textEdited(const QString &arg1)
47 {
48
49 QString userName = ui->userEdit->text();
50 //qDebug() <
51 QSqlQuery query;
52
53 if( (6 > userName.size()) || (20 < userName.size()) )
54 {
55 ui->checkBox->setCheckable(true);
56 ui->checkBox->setChecked(false);
57 ui->checkBox->setStyleSheet("color:blue");
58 ui->checkBox->setText("用户名长度该在6-20个字符之间");
59 ui->checkBox->setCheckable(false);
60 }
61 else
62 {
63 qDebug() << userName.size();
64 query.exec(QObject::tr("select *from mayplestory"));
65 //qDebug()<
66 if(query.first() == NULL)
67 {
68 qDebug()<< query.first();
69 ui->checkBox->setStyleSheet("color:green");
70 ui->checkBox->setText("该用户名可以使用");
71 ui->checkBox->setCheckable(true);
72 ui->checkBox->setChecked(true);
73 insert[0] = '1';
74 value1 = userName;
75 }
76 else
77 {
78 query.previous();
79 while(query.next())
80 {
81
82 QString NameInTable = query.value(1).toString();
83 if(userName == NameInTable)
84 {
85 ui->checkBox->setCheckable(true);
86 ui->checkBox->setChecked(false);
87 ui->checkBox->setStyleSheet("color:red");
88 ui->checkBox->setText("用户名已经被使用了");
89 ui->checkBox->setCheckable(false);
90 }
91 else
92 {
93 ui->checkBox->setCheckable(true);
94 ui->checkBox->setChecked(true);
95 ui->checkBox->setStyleSheet("color:green");
96 ui->checkBox->setText("该用户名可以使用");
97 //ui->checkBox->setCheckable(false);
98 insert[0] = '1';
99 value1 = userName;
100 qDebug() <<"diyige" << insert;
101 return ;
102 }
103 }
104 }
105 }
106 }
107
108 void Regist::on_passwordEdit_textEdited(const QString &arg1)
109 {
110 QString password = ui->passwordEdit->text();
111 if((password.size() <6) || (password.size() > 20))
112 {
113
114 ui->checkBox_2->setCheckable(true);
115 ui->checkBox_2->setChecked(false);
116 ui->checkBox_2->setStyleSheet("color:red");
117 ui->checkBox_2->setText("密码长度应该在6-20个字符");
118 // ui->checkBox->setCheckable(false);
119 }
120 else
121 {
122 ui->checkBox_2->setCheckable(true);
123 ui->checkBox_2->setChecked(true);
124 ui->checkBox_2->setStyleSheet("color:green");
125 ui->checkBox_2->setText("密码长度适合");
126 insert[1] = '1';
127 qDebug() <<"diyige" << insert;
128 }
129 }
130
131 void Regist::on_checkPasswordEdit_textEdited(const QString &arg1)
132 {
133 QString checkPassword = ui->checkPasswordEdit->text();
134 QString password = ui->passwordEdit->text();
135 if((checkPassword.size() <6) || (checkPassword.size() > 20))
136 {
137
138 ui->checkBox_3->setCheckable(true);
139 ui->checkBox_3->setChecked(false);
140 ui->checkBox_3->setStyleSheet("color:red");
141 ui->checkBox_3->setText("密码长度应该在6-20个字符");
142 // ui->checkBox->setCheckable(false);
143 }
144 else
145 {
146 ui->checkBox_3->setCheckable(true);
147 ui->checkBox_3->setChecked(false);
148 ui->checkBox_3->setStyleSheet("color:yellow");
149 ui->checkBox_3->setText("密码长度适合");
150 int temp = password.compare(checkPassword);
151 if(!temp)
152 {
153 ui->checkBox_3->setStyleSheet("color:green");
154 ui->checkBox_3->setText("密码与上一行吻合");
155 ui->checkBox_3->setChecked(true);
156 insert[2] = '1';
157 value2 = checkPassword;
158 qDebug() <<"diyige" << insert;
159 }
160 else
161 {
162 ui->checkBox_3->setStyleSheet("color:red");
163 ui->checkBox_3->setText("与上一行输入的不同");
164 }
165 }
166
167 }
168
169 void Regist::on_emailEdit_textEdited(const QString &arg1)
170 {
171 QString emailAddress = ui->emailEdit->text();
172 QString userName, domainName;
173 QStringList list;
174
175 QRegExp format("([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)");
176 //QRegExp exam;
177 int result = format.exactMatch(emailAddress);
178 if(result)
179 {
180
181 ui->checkBox_4->setStyleSheet("color:green");
182 ui->checkBox_4->setText("邮箱格式符合");
183 QSqlQuery query;
184 if(query.first() == NULL)
185 {
186 ui->checkBox_4->setCheckable(true);
187 ui->checkBox_4->setChecked(true);
188 ui->checkBox->setStyleSheet("color:green");
189 ui->checkBox_4->setText("该邮箱可以使用");
190 //ui->checkBox->setCheckable(false);
191 insert[3] = '1';
192 value3 = emailAddress;
193 }
194 else
195 {
196 query.exec(QObject::tr("select *from mayplestory"));
197 while(query.next())
198 {
199
200 QString NameInTable = query.value(3).toString();
201 if(userName == NameInTable)
202 {
203 ui->checkBox_4->setCheckable(true);
204 ui->checkBox_4->setChecked(false);
205 ui->checkBox_4->setStyleSheet("color:red");
206 ui->checkBox_4->setText("该邮箱已经被注册了");
207 ui->checkBox_4->setCheckable(false);
208 }
209 else
210 {
211 ui->checkBox_4->setCheckable(true);
212 ui->checkBox_4->setChecked(true);
213 ui->checkBox_4->setStyleSheet("color:green");
214 ui->checkBox_4->setText("该邮箱可以使用");
215 insert[3] = '1';
216 value3 = emailAddress;
217 qDebug() <<"diyige" << insert;
218 //ui->checkBox->setCheckable(false);
219 return ;
220 }
221 }
222 }
223 }
224 else
225 {
226 ui->checkBox_4->setCheckable(true);
227 ui->checkBox_4->setChecked(false);
228 ui->checkBox_4->setStyleSheet("color:red");
229 ui->checkBox_4->setText("邮箱格式错误");
230 }
231
232 //qDebug() <<"result"<
233
234
235 }

View Code
《qt 学习(六) 数据库注册用户》
《qt 学习(六) 数据库注册用户》

1 #include "widget.h"
2 #include "ui_widget.h"
3
4 Widget::Widget(QWidget *parent) :
5 QWidget(parent),
6 ui(new Ui::Widget)
7 {
8
9 ui->setupUi(this);
10 }
11
12 Widget::~Widget()
13 {
14 delete ui;
15 }

View Code

 

 

 

《qt 学习(六) 数据库注册用户》

转:https://www.cnblogs.com/mayplestory/p/4000979.html


推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
author-avatar
风情万种791008
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有