把用户密码信息存储在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(); }
- 用户名不存在:
用户名存在,密码输入错误:
用户名,密码输入正确,点击登录跳转到主窗口:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)