标签:style blog http color io os 使用 ar for
做什么:
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 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
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
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
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 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 }
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 }
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 }
标签:style blog http color io os 使用 ar for
原文地址:http://www.cnblogs.com/mayplestory/p/4000979.html