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文件实现记住密码等功能呢持续更。。。。。。
相关文章推荐
- Qt5.6 用SQLite数据库验证做登录框,并查删改xml文件做记住密码和自动登录<三>
- Qt5.6 用SQLite数据库验证做登录框,并查删改xml文件做记住密码和自动登录<一>
- 在 WEB.XML配置<mime-mapping>实现浏览器根据文件类型自动打开
- java web开发在web.xml配置<mime-mapping>实现浏览器根据文件类型自动打开
- struts2中的配置文件的<constant>标签(struts.xml自动加载)
- 在 web.xml中配置<mime-mapping>实现浏览器根据文件类型自动打开
- Qt中QSettings的用法(记住密码和自动登录)
- Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
- php实现记住密码自动登录方法
- 使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
- ssh自动输入密码登录服务器/ssh免输入密码登录/非交互ssh 密码验证
- 转载:php实现记住密码自动登录
- 程序中所不需要访问到的功能,别忘了从WMAppManifest.xml文件中的<Capabilities>的小节将它们去掉。
- 1 完成登录页面(到记事本文件进行密码和用户名的验证)。 2 完成 用户注册页面(将注册信息显示在本页面 div 中)。
- struts.xml配置文件中result的语法:<result name="" type="">xxxxx</result>
- struts.xml配置文件中result的语法:<result name="" type="">xxxxx</result>
- 在shuiguo.xml文件中第三个水果中的苹果节点中添加节点<小苹果>small apple</小苹果>,添加小苹果后将其文本内容修改为“小苹果”,修改该节点后将其父节点苹果(即第三个苹果元素)删除
- TestLink测试用例:Excel转换XML工具<二>实现代码
- 基于Filter<过滤器>登录权限验证设计心得
- [转]web.xml文件中配置<mime-mapping>下载文件类型