首页 > 代码库 > qt 学习(六) 数据库注册用户

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

  做什么:

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

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

3 输入密码  判断密码格式

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

 

做成什么样:

image

 

 

image

 

怎么做:

大体是这样的:

1画ui

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

3 创建数据库

4 编辑槽里的判断函数

 

具体是这样:

1 ui设计

image

 

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"); //字体变绿色

 

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

           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
 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 QDialog11 {12     Q_OBJECT13 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
 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 QDialog11 {12     Q_OBJECT13 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
 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 QWidget38 {39     Q_OBJECT40 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
 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
 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         else19               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
  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     else121     {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     else145     {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         else161             {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             else195             {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                        else210                        {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         else225         {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
 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

 

 

 

image

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