Qt 登录窗口跳转主窗口

Qt 登录窗口跳转主窗口,第1张

Qt 登录窗口跳转主窗口 登录模块实现

把用户密码信息存储在xml文件里,通过读取xml文件实现登录功能。
注: 需要在 .pro文件 添加 xml,QT += core gui xml

loginfo.xml文件信息如下:

登录窗口,如下图:

代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

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 
#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();
}

程序运行结果
    用户名不存在:
    用户名存在,密码输入错误:
    用户名,密码输入正确,点击登录跳转到主窗口:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5719044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存