做什么:
1 登陆按钮按下出现注册页面,
2 输入账号 判断是否可用 查询数据库,用户名是否已经注册
3 输入密码 判断密码格式
4 输入邮箱 判断邮箱格式 查询数据库,邮箱是否已经注册
做成什么样:
怎么做:
大体是这样的:
1画ui
2 lineedit 那一栏选择信号槽,发texted信号
3 创建数据库
4 编辑槽里的判断函数
具体是这样:
1 ui设计
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”); //字体变绿色 4 正则表达式没见过还得好好学习下, 邮箱的格式检测要用到 http://www.jb51.net/tools/zhengze.html 邮箱格式是: regex pattern("([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)"); 1 #ifndef CONNECTION_H View Code 1 #ifndef REGIST_H View Code 1 #ifndef WIDGET_H View Code 1 #include "logindlg.h" View Code 1 #include View Code 1 #include "regist.h" View Code 1 #include "widget.h" View Code 转:https://www.cnblogs.com/mayplestory/p/4000979.html
// 正则表达式,匹配规则:
// 第1组(即用户名),匹配规则:0至9、A至Z、a至z、下划线、点、连字符之中
// 的任意字符,重复一遍或以上(+ 表示重复1次以上)
// 中间,一个“@”符号
// 第二组(即域名),匹配规则:0至9或a至z之中的任意字符重复一遍或以上,
// 接着一个点,接着a至z之中的任意字符重复2至3遍(如com或cn等),
// 第二组内部的一组,一个点,接着a至z之中的任意字符重复2遍(如cn或fr等)
// 内部一整组重复零次或一次
代码 :
。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
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
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
。cpp
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 }
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 }
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" <
31 qDebug() <<"2" <
32 qDebug() <<"3" <
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 }
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 }