登录模块实现
把用户密码信息存储在xml文件里,通过读取xml文件实现登录功能。
注: 需要在 .pro文件 添加 xml,QT += core gui xml
loginfo.xml文件信息如下:
登录窗口,如下图:
代码
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
loginwidget.h
#ifndef LOGINWIDGET_H
#define LOGINWIDGET_H
#include "mainwindow.h"
#include <QWidget>
#include <QMessageBox>
#include <QDomDocument>
#include <QFile>
#include <QDebug>
namespace Ui {
class LoginWidget;
}
class LoginWidget : public QWidget
{
Q_OBJECT
public:
explicit LoginWidget(QWidget *parent = 0);
~LoginWidget();
public:
void showMainWindow();
private slots:
void on_loginBtn_clicked();
private:
Ui::LoginWidget *ui;
//指向主窗口的指针
MainWindow *mainWindow;
//全局变量用于获取XML中的DOM对象
QDomDocument mydoc;
};
#endif // LOGINWIDGET_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
loginwidget.cpp
#include "loginwidget.h"
#include "ui_loginwidget.h"
QString xmlpath = "./xml/loginfo.xml"; //XML文件路径
LoginWidget::LoginWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::LoginWidget)
{
ui->setupUi(this);
this->setWindowTitle(tr("登录"));
//输入密码框隐藏密码
ui->passwordEdit->setEchoMode(QLineEdit::Password);
}
LoginWidget::~LoginWidget()
{
delete ui;
}
//实现登录验证功能
void LoginWidget::showMainWindow()
{
QFile file(xmlpath); //创建XML文件对象
mydoc.setContent(&file); //将XML对象赋给QdomDocument类型的Qt文档句柄
QDomElement root = mydoc.documentElement(); //获取XML文档的DOM根元素
if(root.hasChildNodes())
{
QDomNodeList userList = root.childNodes(); //获取根元素的全部子节点
bool exist = false; //指示用户是否存在
for(int i = 0; i < userList.count(); i++)
{
QDomNode user = userList.at(i); //根据当前索引i获取用户节点元素
QDomNodeList record = user.childNodes(); //该用户的全部属性元素
//解析出用户名及密码
QString uname = record.at(0).toElement().text(); //"user1","user2"
QString pword = record.at(1).toElement().text(); //"password1","password2"
if(uname == ui->userNameEdit->text())
{
exist = true; //用户存在
if(!(pword == ui->passwordEdit->text()))
{
QMessageBox::warning(0, QObject::tr("failed"), "密码错误,请重新输入!");
ui->passwordEdit->clear();
ui->passwordEdit->setFocus();
return;
}
}
} //for
if(!exist)
{
QMessageBox::warning(0, QObject::tr("failed"), "此用户不存在,请重新输入!");
ui->userNameEdit->clear();
ui->passwordEdit->clear();
ui->userNameEdit->setFocus();
return;
}
//用户存在且密码验证通过
mainWindow = new MainWindow(0);
mainWindow->setWindowTitle(tr("主窗口"));
mainWindow->show(); //显示主窗口
} //if
}
void LoginWidget::on_loginBtn_clicked()
{
//根据验证结果判断是否进入主窗口
showMainWindow();
}
main.cpp
#include "mainwindow.h"
#include "loginwidget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// MainWindow w;
// w.show();
LoginWidget w;
w.show();
return a.exec();
}
程序运行结果
- 用户名不存在:
- 用户名存在,密码输入错误:
- 用户名,密码输入正确,点击登录跳转到主窗口: