Qt功能优化:简易登录模板

简介: Qt功能优化:简易登录模板

Qt功能优化:简易登录模板


前言

一个相对健全的软件,一般均有登录注册功能,但是对于大部分初学者来说,想要实现该功能,还需要学习数据库等相关知识。那么,有没有一种不需要学习数据库等相关知识,就能实现相关功能呢?


一、效果图

如图1所示,为我用XML文件储存账号密码,并采用MD5加密技术,用来实现相关的登录功能,来帮助Qt初学者们在短时间内迅速完成一个相对功能健全的软件。

在这里插入图片描述

二、相关源代码

1. .xml部分

userlog.xml
<?xml version='1.0' encoding='UTF-8'?>
    <用户账号>
        <user id="1">
            <用户名>水漂奇鼋</用户名>
            <密码>19830925</密码>
        </user>
        <user id="2">
            <用户名>忆梦茹澜</用户名>
            <密码>12345678</密码>
        </user>
            <user id="3">
            <用户名>测试1</用户名>
            <密码>123456</密码>
</用户账号>
MD5加密版,后三个密码均为123456
<?xml version='1.0' encoding='UTF-8'?>

    <用户账号>
        <user id="1">
            <用户名>000001</用户名>

            <密码>f0133c214d7fd02868f74de30d932a62</密码>
        </user>
        <user id="2">

            <用户名>666666</用户名>
            <密码>e10adc3949ba59abbe56e057f20f883e</密码>
        </user>
            <user id="3">

            <用户名>888888</用户名>
            <密码>e10adc3949ba59abbe56e057f20f883e</密码>
        </user>
            <user id="4">

            <用户名>2078411248</用户名>
            <密码>e10adc3949ba59abbe56e057f20f883e</密码>
        </user>
    
</用户账号>

2. .h部分

LoginDialog.h
#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include "mainwindow.h"
#include <QFile>
#include "qdom.h"
#include <QMessageBox>
namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = 0);
    ~LoginDialog();

private slots:
    void on_loginPushButton_clicked();
    void showWeiChatWindow();

private:
    Ui::LoginDialog *ui;
    MainWindow *weiChatWindow;
    QDomDocument mydoc;
};

#endif // LOGINDIALOG_H

MD5加密版
#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include <QCryptographicHash>
#include "mainwindow.h"
#include <QFile>
#include "qdom.h"
#include <QMessageBox>

namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = 0);
    ~LoginDialog();
     QString strToMd5(QString str);
    QString convertMD5(QString inStr);


private slots:
    void on_PawBtn_clicked(); //密码登录
    void on_loginPushButton_clicked();
    void showWeiChatWindow();

private:
    Ui::LoginDialog *ui;
    MainWindow *weiChatWindow;
    QDomDocument mydoc;
    void keyPressEvent(QKeyEvent *event);
};

#endif // LOGINDIALOG_H

3. .cpp部分

LoginDialog.cpp
#include "logindialog.h"
#include "ui_logindialog.h"

LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    ui->setupUi(this);
    ui->pwdLineEdit->setFocus();// setFocus为对焦点,使光标移到此处
}

LoginDialog::~LoginDialog()
{
    delete ui;
}

void LoginDialog::on_loginPushButton_clicked()
{
    showWeiChatWindow();
}

void LoginDialog::showWeiChatWindow()
{
    QFile file("userlog.xml");
    mydoc.setContent(&file);
    QDomElement root = mydoc.documentElement();
    if (root.hasChildNodes())
    {
        QDomNodeList userList = root.childNodes();
        bool exist = false;
        for (int i = 0; i < userList.count(); i++)
        {
            QDomNode user = userList.at(i);
            QDomNodeList record = user.childNodes();
            QString uname = record.at(0).toElement().text();
            QString pword = record.at(1).toElement().text();
            if (uname == ui->usrLineEdit->text())
            {
                exist = true;
                if (!(pword == ui->pwdLineEdit->text()))
                {
                    QMessageBox::warning(0, QObject::tr("提示"), "口令错!请重新输入。");
                    ui->pwdLineEdit->clear();
                    ui->pwdLineEdit->setFocus();
                    return;
                }
            }
        }
        if (!exist)
        {
            QMessageBox::warning(0, QObject::tr("提示"), "此用户不存在!请重新输入。");
            ui->usrLineEdit->clear();
            ui->pwdLineEdit->clear();
            ui->usrLineEdit->setFocus();
            return;
        }
        weiChatWindow = new MainWindow(0);
        weiChatWindow->setWindowTitle(ui->usrLineEdit->text());
        weiChatWindow->show();
    }
}

MD5加密版
//登录
void LoginWidget::on_LoginBtn_clicked()
{
    showYXWindow();
}

void LoginWidget::showYXWindow()
{
    QFile file("userlog.xml");
    mydoc.setContent(&file);
    QDomElement root = mydoc.documentElement();
    if (root.hasChildNodes())
    {
        QDomNodeList userList = root.childNodes();
        bool exist = false;
        for (int i = 0; i < userList.count(); i++)
        {
            QDomNode user = userList.at(i);
            QDomNodeList record = user.childNodes();
            QString uname = record.at(0).toElement().text();
            QString pword = record.at(1).toElement().text();
            QString pwdMd5 = strToMd5(ui->PasLine->text());
            //QString pwordJie1 = convertMD5(pword);
            //QString pwordJie2 = convertMD5(pwordJie1);

            if (uname == ui->usrLine->text())
            {
                exist = true;
                if (!(pword == pwdMd5))
                {
                    QMessageBox::warning(0, QObject::tr("提示"), "口令错!请重新输入。");
                    ui->PasLine->clear();
                    ui->PasLine->setFocus();
                    return;
                }
            }
        }
        if (!exist)
        {
            QMessageBox::warning(0, QObject::tr("提示"), "此用户不存在!请重新输入。");
            ui->usrLine->clear();
            ui->PasLine->clear();
            ui->usrLine->setFocus();
            return;
        }
        MainWidget *YXWindow = new MainWidget();
        //weiChatWindow->setWindowTitle(ui->usrLineEdit->text());
        YXWindow->show();
        this->close();
    }
}

QString LoginWidget::strToMd5(QString str)
{
    QString strMd5;
    QByteArray qba;
    qba = QCryptographicHash::hash(str.toLatin1(),QCryptographicHash::Md5);
    strMd5.append(qba.toHex());
    return strMd5;
}

QString LoginWidget::convertMD5(QString inStr)
{
    char a[7];
    strcpy(a,inStr.toLocal8Bit().data());
    qDebug()<<a;
    for(int i=0;i<7;i++){
        a[i]=(char)(a[i] ^'t');
    }
    QString s(a);
    qDebug()<<s;
    return s;
}
void LoginWidget::keyPressEvent(QKeyEvent *event)
{
    if(event->key()==Qt::Key_Return) {
        showYXWindow();
    }

}

总结

以上是部分Qt关于功能优化的部分,所有相关的Qt界面优化的部分,均在下方专栏——Qt功能优化中,大家如果感兴趣可以进行观看并使用,希望通过这些文章能够使大家的Qt软件更加美观和完美 !!!

另,如果大家有时间的话,也可以在个人主页中的专栏部分,查看我的Qt实战专栏Qt界面优化专栏哦,里面分别存放有Qt相关的实战软件和相对实用的附属功能,大家感兴趣可以看看(๑>؂<๑)

另附Qt实战:云曦聊天室篇Qt界面优化:鼠标双击特效两篇相关文章,大家可以下滑到文章下方专栏处,查看相关专栏中的其它文章,希望能帮助到大家,感谢大家支持~( ̄▽ ̄~)~

相关文章
|
7月前
|
开发框架 Java 编译器
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
243 1
|
Linux API Windows
linux系统中利用QT实现蓝牙功能的方法
linux系统中利用QT实现蓝牙功能的方法
609 0
|
Linux
linux系统中利用QT实现音乐播放器的功能
linux系统中利用QT实现音乐播放器的功能
250 0
|
5月前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
168 4
|
6月前
|
数据安全/隐私保护
Qt布局(登录窗口实现)
Qt布局(登录窗口实现)
|
6月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
91 1
|
6月前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
|
Ubuntu Linux API
linux系统中使用QT实现摄像头功能的方法
linux系统中使用QT实现摄像头功能的方法
268 0
|
存储 Linux
linux系统中使用QT实现多媒体的功能方法
linux系统中使用QT实现多媒体的功能方法
200 0