把用户密码信息存储在xml文件里,通过读取xml文件实现登录功能。
注: 需要在 .pro文件 添加 xml,QT += core gui xml
loginfo.xml文件信息如下:
登录窗口,如下图:
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #includenamespace 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#include #include #include #include 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程序运行结果int main(int argc, char *argv[]) { QApplication a(argc, argv); // MainWindow w; // w.show(); LoginWidget w; w.show(); return a.exec(); }
- 用户名不存在:
用户名存在,密码输入错误:
用户名,密码输入正确,点击登录跳转到主窗口:



