做什么:

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
 #ifndef CONNECTION_H
#define CONNECTION_H #include <QDialog> namespace Ui {
class loginDlg;
} class loginDlg : public QDialog
{
Q_OBJECT public:
explicit loginDlg(QWidget *parent = );
~loginDlg(); private slots:
void on_loginBtn_clicked();
void on_registButton_clicked(); private:
Ui::loginDlg *ui; }; #endif // LOGINDLG_H
 #ifndef REGIST_H
#define REGIST_H #include <QDialog>
#include <QString>
namespace Ui {
class Regist;
} class Regist : public QDialog
{
Q_OBJECT public:
explicit Regist(QWidget *parent = );
~Regist(); private slots: void on_sureButton_clicked(); void on_userEdit_textEdited(const QString &arg1); void on_passwordEdit_textEdited(const QString &arg1); void on_checkPasswordEdit_textEdited(const QString &arg1); void on_emailEdit_textEdited(const QString &arg1); private:
Ui::Regist *ui;
}; #endif // REGIST_H
 #ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QDebug>
#include <QMessageBox>
#include <QCoreApplication>
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mayplestory.db");
if(!db.open())
{
QMessageBox::critical(,qApp->tr("Cannot open database"),qApp->tr("unable to estabilished a database connection"),QMessageBox::Cancel);
return false;
} qDebug() << "created begin";
QSqlQuery query;
query.exec(QObject::tr("create table mayplestory(id interger, name varchar(20), password varchar(20), email varchar(20));"));
//query.exec(QObject::tr("insert into mayplestory values(0,'yuyuyu','123456');")); // query.exec("select *from information");
qDebug() << "created end" ;
return true; }
namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = );
~Widget(); private:
Ui::Widget *ui;
QSqlDatabase db; }; #endif // WIDGET_H
。cpp
 #include "logindlg.h"
#include "ui_logindlg.h"
#include <QtGui>
#include "widget.h"
#include "regist.h" loginDlg::loginDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::loginDlg)
{ ui->setupUi(this);
ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
//ui->pushButton->setFlat(true);
QObject::connect(ui->registButtton,SIGNAL(clicked()),this,SLOT(on_registButton_clicked()));
} loginDlg::~loginDlg()
{
delete ui;
} void loginDlg::on_loginBtn_clicked()//登陆界面函数
{ QSqlQuery query;
query.exec(QObject::tr("select * from mayplestory;")); while(query.next())
{ if(ui-> usrLineEdit->text().trimmed() == query.value()&& ui-> pwdLineEdit->text() == query.value() )
{
accept();
break;
}//比对数据库,ok进入主窗口
if (query.next() == NULL)
{
QMessageBox::warning(this,tr("Warning"),tr("user name or password error !!!"),QMessageBox::Yes);
ui->usrLineEdit->clear();
ui->pwdLineEdit->clear();
ui->usrLineEdit->setFocus();
} } } void loginDlg::on_registButton_clicked()
{ Regist w;
w.exec();//谁调用就在谁处实现, login调用regist 就在 login处实现显示。 }
 #include <QtGui/QApplication>
#include <QTextCodec>
#include "widget.h"
#include "logindlg.h"
#include "regist.h" int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb2312"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312"));
Widget w; loginDlg login; //登陆窗口对象
if(!createConnection())
qDebug()<<"unconnect";
else
qDebug()<<"connect";
login.show();
//Regist x;
// x.show();
if(login.exec() == QDialog::Accepted)
{
w.show(); //通过后的主窗口
return a.exec();
}
else return ; }
 #include "regist.h"
#include "ui_regist.h"
#include "widget.h"
#include <QPalette>
#include <QRegExp>
Regist::Regist(QWidget *parent) :
QDialog(parent),
ui(new Ui::Regist)
{
ui->setupUi(this); } Regist::~Regist()
{
delete ui;
}
int number = ;
QString insert = "";
QString value1;
QString value2;
QString value3; void Regist::on_sureButton_clicked()
{
QString exam = "";
if(exam == insert)
{
qDebug() << "regest now";
qDebug() << "" << value1 <<endl;
qDebug() << "" << value2 <<endl;
qDebug() << "" << value3 <<endl; QSqlQuery query;//
query.exec(QObject::tr("insert into mayplestory(id,name,password,email)values('%1','%2','%3','%4')").arg(number).arg(value1).arg(value2).arg(value3));
number++;
}
else
{
qDebug() << "regest can't";
}
} void Regist::on_userEdit_textEdited(const QString &arg1)
{ QString userName = ui->userEdit->text();
//qDebug() << userName;
QSqlQuery query; if( ( > userName.size()) || ( < userName.size()) )
{
ui->checkBox->setCheckable(true);
ui->checkBox->setChecked(false);
ui->checkBox->setStyleSheet("color:blue");
ui->checkBox->setText("用户名长度该在6-20个字符之间");
ui->checkBox->setCheckable(false);
}
else
{
qDebug() << userName.size();
query.exec(QObject::tr("select *from mayplestory"));
//qDebug()<< query.first();
if(query.first() == NULL)
{
qDebug()<< query.first();
ui->checkBox->setStyleSheet("color:green");
ui->checkBox->setText("该用户名可以使用");
ui->checkBox->setCheckable(true);
ui->checkBox->setChecked(true);
insert[] = '';
value1 = userName;
}
else
{
query.previous();
while(query.next())
{ QString NameInTable = query.value().toString();
if(userName == NameInTable)
{
ui->checkBox->setCheckable(true);
ui->checkBox->setChecked(false);
ui->checkBox->setStyleSheet("color:red");
ui->checkBox->setText("用户名已经被使用了");
ui->checkBox->setCheckable(false);
}
else
{
ui->checkBox->setCheckable(true);
ui->checkBox->setChecked(true);
ui->checkBox->setStyleSheet("color:green");
ui->checkBox->setText("该用户名可以使用");
//ui->checkBox->setCheckable(false);
insert[] = '';
value1 = userName;
qDebug() << "diyige" << insert;
return ;
}
}
}
}
} void Regist::on_passwordEdit_textEdited(const QString &arg1)
{
QString password = ui->passwordEdit->text();
if((password.size() < ) || (password.size() > ))
{ ui->checkBox_2->setCheckable(true);
ui->checkBox_2->setChecked(false);
ui->checkBox_2->setStyleSheet("color:red");
ui->checkBox_2->setText("密码长度应该在6-20个字符");
// ui->checkBox->setCheckable(false);
}
else
{
ui->checkBox_2->setCheckable(true);
ui->checkBox_2->setChecked(true);
ui->checkBox_2->setStyleSheet("color:green");
ui->checkBox_2->setText("密码长度适合");
insert[] = '';
qDebug() << "diyige" << insert;
}
} void Regist::on_checkPasswordEdit_textEdited(const QString &arg1)
{
QString checkPassword = ui->checkPasswordEdit->text();
QString password = ui->passwordEdit->text();
if((checkPassword.size() < ) || (checkPassword.size() > ))
{ ui->checkBox_3->setCheckable(true);
ui->checkBox_3->setChecked(false);
ui->checkBox_3->setStyleSheet("color:red");
ui->checkBox_3->setText("密码长度应该在6-20个字符");
// ui->checkBox->setCheckable(false);
}
else
{
ui->checkBox_3->setCheckable(true);
ui->checkBox_3->setChecked(false);
ui->checkBox_3->setStyleSheet("color:yellow");
ui->checkBox_3->setText("密码长度适合");
int temp = password.compare(checkPassword);
if(!temp)
{
ui->checkBox_3->setStyleSheet("color:green");
ui->checkBox_3->setText("密码与上一行吻合");
ui->checkBox_3->setChecked(true);
insert[] = '';
value2 = checkPassword;
qDebug() << "diyige" << insert;
}
else
{
ui->checkBox_3->setStyleSheet("color:red");
ui->checkBox_3->setText("与上一行输入的不同");
}
} } void Regist::on_emailEdit_textEdited(const QString &arg1)
{
QString emailAddress = ui->emailEdit->text();
QString userName, domainName;
QStringList list; QRegExp format("([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)");
//QRegExp exam;
int result = format.exactMatch(emailAddress);
if(result)
{ ui->checkBox_4->setStyleSheet("color:green");
ui->checkBox_4->setText("邮箱格式符合");
QSqlQuery query;
if(query.first() == NULL)
{
ui->checkBox_4->setCheckable(true);
ui->checkBox_4->setChecked(true);
ui->checkBox->setStyleSheet("color:green");
ui->checkBox_4->setText("该邮箱可以使用");
//ui->checkBox->setCheckable(false);
insert[] = '';
value3 = emailAddress;
}
else
{
query.exec(QObject::tr("select *from mayplestory"));
while(query.next())
{ QString NameInTable = query.value().toString();
if(userName == NameInTable)
{
ui->checkBox_4->setCheckable(true);
ui->checkBox_4->setChecked(false);
ui->checkBox_4->setStyleSheet("color:red");
ui->checkBox_4->setText("该邮箱已经被注册了");
ui->checkBox_4->setCheckable(false);
}
else
{
ui->checkBox_4->setCheckable(true);
ui->checkBox_4->setChecked(true);
ui->checkBox_4->setStyleSheet("color:green");
ui->checkBox_4->setText("该邮箱可以使用");
insert[] = '';
value3 = emailAddress;
qDebug() << "diyige" << insert;
//ui->checkBox->setCheckable(false);
return ;
}
}
}
}
else
{
ui->checkBox_4->setCheckable(true);
ui->checkBox_4->setChecked(false);
ui->checkBox_4->setStyleSheet("color:red");
ui->checkBox_4->setText("邮箱格式错误");
} //qDebug() << "result"<<result; }
 #include "widget.h"
#include "ui_widget.h" Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{ ui->setupUi(this);
} Widget::~Widget()
{
delete ui;
}

最新文章

  1. K近邻模型(k-NN)
  2. 使用VirtualBox自带管理工具命令为虚拟磁盘扩展空间
  3. Oulipo(poj 3461)
  4. vlc android 移植版编译
  5. 解决IIS Web部署 svg/woff/woff2字体 404错误
  6. 修改Capfile,在正式环境不再使用migration修改数据库
  7. hibernate 数据行数统计 count(*)
  8. 1228.1——计算器(未使用MVC设计模式)
  9. Drawable复习—第六章
  10. sharepoint代码添加WebPart
  11. [bzoj4755][Jsoi2016]扭动的回文串
  12. python模块------pyinotify
  13. VS2015右键集成TortoiseGit
  14. Python函数基础--def及return语句地操作
  15. WCF上传下载文件
  16. linux shell脚本调用java main方法 代码
  17. cron,linux定时脚本
  18. Makefile-fPIC,C++静态库与动态库
  19. sparkR could not find function &quot;textFile&quot;
  20. C语言--第三次作业

热门文章

  1. flask 根路由在蓝图中
  2. vector内存增长方式
  3. php ltrim()函数 语法
  4. 在python3.7下怎么安装matplotlib与numpy
  5. v-show与v-if的区别
  6. angualr项目引入容联 七陌7mroo
  7. linux系统中查看日志及系统信息
  8. Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用
  9. 显示等待WebDriverWait+EC
  10. Red Gate .NET Reflector