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
#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
#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;
}
最新文章
- K近邻模型(k-NN)
- 使用VirtualBox自带管理工具命令为虚拟磁盘扩展空间
- Oulipo(poj 3461)
- vlc android 移植版编译
- 解决IIS Web部署 svg/woff/woff2字体 404错误
- 修改Capfile,在正式环境不再使用migration修改数据库
- hibernate 数据行数统计 count(*)
- 1228.1——计算器(未使用MVC设计模式)
- Drawable复习—第六章
- sharepoint代码添加WebPart
- [bzoj4755][Jsoi2016]扭动的回文串
- python模块------pyinotify
- VS2015右键集成TortoiseGit
- Python函数基础--def及return语句地操作
- WCF上传下载文件
- linux shell脚本调用java main方法 代码
- cron,linux定时脚本
- Makefile-fPIC,C++静态库与动态库
- sparkR could not find function ";textFile";
- C语言--第三次作业
热门文章
- flask 根路由在蓝图中
- vector内存增长方式
- php ltrim()函数 语法
- 在python3.7下怎么安装matplotlib与numpy
- v-show与v-if的区别
- angualr项目引入容联 七陌7mroo
- linux系统中查看日志及系统信息
- Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用
- 显示等待WebDriverWait+EC
- Red Gate .NET Reflector