写界面资源,以及控件的各种命名:
用户名编辑框命名为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:
在loginDialog.cpp文件的构造函数中添加LoginData *login; //定义数据库类对象
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文件实现记住密码等功能呢
![大笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)