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

写界面资源,以及控件的各种命名:

 用户名编辑框命名为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文件实现记住密码等功能呢 
大笑持续更。。。。。。 


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值