首页 > 代码库 > qt 学习(六) 数据库注册用户
qt 学习(六) 数据库注册用户
做什么:
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 正则表达式没见过还得好好学习下, 邮箱的格式检测要用到
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
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
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
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 }
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 }
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 }
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 }
qt 学习(六) 数据库注册用户