热门标签 | 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


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 第一步:PyQt4Designer设计程序界面该部分设计类同VisvalStudio内的设计,改下各部件的objectName!设计 ... [详细]
  • fileuploadJS@sectionscripts{<scriptsrc~Contentjsfileuploadvendorjquery.ui.widget.js ... [详细]
  • 人脸检测 pyqt+opencv+dlib
    一、实验目标绘制PyQT界面,调用摄像头显示人脸信息。在界面中,用户通过点击不同的按键可以实现多种功能:打开和关闭摄像头, ... [详细]
  • 注:根据Qt小神童的视频教程改编概论:利用最新的Qt5.1.1在windows下开发的一个小的时钟程序,有指针与表盘。1.Qtforwindows开发环境最新的Qt已经集 ... [详细]
  • java unhandled,Eclipse编辑java文件报Unhandled event loop exception错误的解
    本人Eclipse版本是”eclipse-jee-kepler-SR2-win32-x86_64“昨天因为换电脑,所以重装了一下软件,装好eclipse ... [详细]
  • 先上图引入插件在pubspec.yaml中引入charts_flutter插件使用的时候版本到0.6.0,插件地址:https:github.comgooglecharts使用插件 ... [详细]
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社区 版权所有