您的位置:首页 > 博客中心 > 数据库 >

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

时间:2022-03-14 00:27

  做什么:

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

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

3 输入密码  判断密码格式

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

 

做成什么样:

 

 

 

怎么做:

大体是这样的:

1画ui

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

3 创建数据库

4 编辑槽里的判断函数

 

具体是这样:

1 ui设计

 

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

下面创建数据库

调用数据库需要的头文件

#include <QtSql/QSqlDatabase>

#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
 

创建数据库

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  正则表达式没见过还得好好学习下, 邮箱的格式检测要用到

邮箱格式是:

 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
gxlsystem.com,布布扣gxlsystem.com,布布扣
 1 #ifndef CONNECTION_H
 2 #define CONNECTION_H
 3 
 4 #include <QDialog>
 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 gxlsystem.com,布布扣gxlsystem.com,布布扣
 1 #ifndef REGIST_H
 2 #define REGIST_H
 3 
 4 #include <QDialog>
 5 #include <QString>
 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 gxlsystem.com,布布扣gxlsystem.com,布布扣
 1 #ifndef WIDGET_H
 2 #define WIDGET_H
 3 
 4 #include <QWidget>
 5 #include <QtSql/QSqlDatabase>
 6 #include <QtSql/QSqlQuery>
 7 #include <QtSql/QSqlError>
 8 #include <QDebug>
 9 #include <QMessageBox>
10 #include <QCoreApplication>
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 gxlsystem.com,布布扣gxlsystem.com,布布扣
 1 #include "logindlg.h"
 2 #include "ui_logindlg.h"
 3 #include <QtGui>
 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 gxlsystem.com,布布扣gxlsystem.com,布布扣
 1 #include <QtGui/QApplication>
 2 #include <QTextCodec>
 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 gxlsystem.com,布布扣gxlsystem.com,布布扣
  1 #include "regist.h"
  2 #include "ui_regist.h"
  3 #include "widget.h"
  4 #include <QPalette>
  5 #include <QRegExp>
  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" << value1 <<endl;
 31         qDebug() << "2" << value2 <<endl;
 32         qDebug() << "3" << value3 <<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() << userName;
 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()<< query.first();
 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"<<result;
233 
234 
235 }
View Code gxlsystem.com,布布扣gxlsystem.com,布布扣
 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

 

 

 

本类排行

今日推荐

热门手游