您的位置:首页 > 编程语言 > Qt开发

Qt5.6 用SQLite数据库验证做登录框,并查删改xml文件做记住密码和自动登录<二>

2016-09-08 21:34 507 查看
写界面资源,以及控件的各种命名: 用户名编辑框命名为comboBoxUserName   ,改变样式表添加背景色白色密码控件的命名为lineEditPassWord               改变样式表添加背景色白色记住密码复选框命名为checkBoxRemeber自动登录复选框命名为checkBoxAuto登录按钮命名为pushButtonLogin                    改变样式表添加背景色白色background-color: rgb(85, 170, 255);并将main.cpp改为如下所示代码
#include "logindialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFont font("ZYSong20");
a.setFont(font);
MainWindow w;
LoginDialog login;
if(login.exec()==QDialog::Accepted)
{
w.show();
return a.exec();
}
else
{
return 0;
}
}
然后在loginDialog.cpp的构造函数中将lineEditPassWord这个控件设置为密码形式
ui->lineEditPassWord->setEchoMode(QLineEdit::Password);  //设置为加密形式
然后在右键新建一个C++类,类名为loginData 主要写数据库验证在头文件中loginData.h中写如下代码
#ifndef LOGINDATA_H
#define LOGINDATA_H
#include<QString>
#include<QSqlDriver>
#include<QSqlRecord>
#include<QSqlQuery>
#include<QSqlError>
#include<QSqlDatabase>
#include<QtXml>
#include<QFile>
#include<QIODevice>
#include<QDomNodeList>
#include<QDebug>
#include<QMessageBox>
class LoginData
{
public:
/************构造函数*************/
LoginData();
/************连接数据库*************/
bool dataCnn();
/************查询数据库*************/
bool dataSelect(QString studentUserName, QString studentPassWord);
/************读取xml文件*************/
bool readXML();
private:
QString dataBaseName;   //数据库名称
QString dataBaseVersion;//数据库版本
QString ip;             //ip地址
QString port;           //端口
QString userName;       //用户名
QString passWord;       //密码
QSqlDatabase db;        //定义数据库对象
};
#endif // LOGINDATA_H
将数据库.db文件放到运行目录下,在该db数据库文件中,创建好了一张数据表表user,字段分别为username password ,该程序要在Debug下运行就放到Debug下面,要在release下面运行就放在release文件夹下,如下图所示该文件student.db文件放到release目录下,读取XML文件,该Student.xml文件也放到该目录下student.xml的内容为:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<database>
<ip>127.0.0.1</ip>
<port>8080</port>
<databaseversion>QSQLITE</databaseversion>
<databasename>student.db</databasename>
<username>root</username>
<password>123</password>
</database>
</data>
验证登录,以及读取xml信息代码如下所示
#include "logindata.h"
/***************************构造函数***********************/
LoginData::LoginData()
{
if(readXML())  //如果读取xml文件成功,则连接数据库
{
if( !dataCnn() )
{
qDebug()<<"连接失败";
}
}
}
/***************************连接数据库***********************/
bool LoginData::dataCnn()
{
db=QSqlDatabase::addDatabase(dataBaseVersion);             //设置数据库类型
db.setHostName(ip);                                        //设置数据库主机名
db.setPort(port.toInt());                                  //设置端口
db.setDatabaseName(dataBaseName);                          //设置数据库名
db.setUserName(userName);                                  //设置用户名
db.setPassword(passWord);                                  //设置密码
bool ok=db.open();
return ok;
}
/***************************查询数据库***********************/
bool LoginData::dataSelect(QString studentUserName,QString studentPassWord)
{
int Count=0;
if(!db.isOpen())
{
db.open();
}
QSqlQuery query;
QString Str=QString("select * from user where username='%1' and password='%2';").arg(studentUserName).arg(studentPassWord);
bool success=query.exec(Str);  //执行sql语句
if(!success)
{
return false;
}
else
{
while(query.next())        //挨个遍历数据
{
Count++;
}
}
if(Count==1)
{
return true;
}
else
{
return false;
}
}
/***************************读取xml文件**********************/
bool LoginData::readXML()
{
int Count=0;
QDomDocument dom;
QFile *file=new QFile("student.xml");
if(file->open(QIODevice::ReadOnly))
{
if(!dom.setContent(file))  //将该xml文件导入到dom中
{
file->close();
    return false;
}
}
else
{
return false;
}
file->close();
QDomElement docElem=dom.documentElement();   //返回根元素
QDomNode node=docElem.firstChild();          //返回根节点的第一个子节点
while(!node.isNull())                        //如果节点不为空
{
if(node.isElement())                     //如果节点是元素
{
QDomElement element=node.toElement();//将其转化为元素
QDomNodeList list=element.childNodes();//取出该元素的所有子节点放到list中
//将子节点元素全部取出来
for(int i=0;i<list.count();i++)
{
QDomNode domNode=list.at(i);
if(domNode.isElement())
{
//取出我们所要的数据
switch(i)
{
case 0:ip=domNode.toElement().text();break;
case 1:port=domNode.toElement().text();break;
case 2:dataBaseVersion=domNode.toElement().text();break;
case 3:dataBaseName=domNode.toElement().text();break;
case 4:userName=domNode.toElement().text();break;
case 5:passWord=domNode.toElement().text();break;
}
}
}
}
Count++;
node=node.nextSibling(); //下一个兄弟节点
}
if(Count==1)
{
return true;
}
else
{
return false;
}
}
再回到loginDialog.h文件中,登录按钮转到槽clicked()
private slots:
void on_pushButtonLogin_clicked(); //登录按钮
private:
LoginData *login;                //定义数据库类对象
在loginDialog.cpp文件的构造函数中添加
login=new LoginData();
然后在槽函数登录按钮的响应函数中添加
/***************登录按钮********************/
void LoginDialog::on_pushButtonLogin_clicked()
{
if(login->dataSelect(ui->comboBoxUserName->currentText(),ui->lineEditPassWord->text()))
{
accept();                                                    //判断登录成功后accept,在main.cpp中进入主窗口
}
else
{
QMessageBox::information(this,tr("系统提示"),tr("登录失败"));//登录失败
}
}
程序写到这里就可登录成功了,别着急,还有XML文件实现记住密码等功能呢持续更。。。。。。
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Qt SQLITE C++ XML
相关文章推荐