目录
效果图:
原用户名:xdu
原密码:123456
输入错误提示:
输入正确后跳转:
超过最大尝试次数,退出程序:
简单讲一下思路:
main.cpp
mainwindow.cpp
mainwindow.h
dlglogin.cpp
dlglogin.h
新建一个Qt Designer Form Class做为登录对话框,可参考程序启动图的那个开发程序:
https://blog.csdn.net/qq_41895747/article/details/104057013
md5加密。。。我也不是太懂密码学这块,用的QcryptographicHash里现成的
注册表这个,其实在这个程序里面没有必要,因为我还没有添加修改注册的功能……后面可以拓展
两个UI很简单
XML就不贴了。。。
#include "mainwindow.h"
#include "qdlglogin.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDlgLogin *dlgLogin = new QDlgLogin;
if(dlgLogin->exec()==QDialog::Accepted){//运行登录对话框,如果结果正确
MainWindow w;//运行主窗口
w.show();
return a.exec();
}
return 0;
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowIcon(QIcon("icon.png"));
setWindowTitle(QStringLiteral("登录后对话框"));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionExit_triggered()
{
}
void MainWindow::on_pushButton_clicked()
{
this->close();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_actionExit_triggered();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "qdlglogin.h"
#include "ui_qdlglogin.h"
QDlgLogin::QDlgLogin(QWidget *parent) :
QDialog(parent),
ui(new Ui::QDlgLogin)
{
ui->setupUi(this);
qDebug()<PasseordEdit->setEchoMode(QLineEdit::Password);//设置为密码输入方式
this->setAttribute(Qt::WA_DeleteOnClose);//设置为关闭时删除
this->setWindowFlags(Qt::SplashScreen);//设置为SplashScreen
this->setWindowFlag(Qt::FramelessWindowHint);//设置为无边框模式
readSettings();//读取用户密码
}
QDlgLogin::~QDlgLogin()
{
delete ui;
}
//按下确定键
void QDlgLogin::on_OkBtn_clicked()
{
QString user = ui->UserEdit->text().trimmed();//输入用户名
QString pswd = ui->PasseordEdit->text().trimmed();//输入密码
qDebug()<accept();//关闭对话框
}else{
m_tryCount++;//试错次数加一
if(m_tryCount>5){//输入错误次数大于5
QMessageBox::critical(this,QStringLiteral("Error"),QStringLiteral("输入错误的次数过多,强行退出!"));
this->reject();//退出拒绝
}else{
QMessageBox::warning(this,QStringLiteral("错误提示"),QStringLiteral("用户名或密码错误!\n请重新输入!"));
}
}
}
//按下取消键
void QDlgLogin::on_CancleBtn_clicked()
{
this->close();//退出程序
}
//读取用户名和密码
void QDlgLogin::readSettings(){
QString organization = "WWB-Qt";
QString appName = "Login";
QSettings settings(organization,appName);
bool saved=settings.value("saved",false).toBool();//读取saved
m_user = settings.value("Username","user").toString();//读取UserName
// QString defaultPSWD = encrypt("123");//加密初始密码后的数据
QString defaultPSWD = encrypt(m_pswd);//加密初始密码后的数据
m_pswd = settings.value("PSWD",defaultPSWD).toString();//读取PSWD
qDebug()<UserEdit->setText(m_user);
ui->checkBox->setChecked(saved);
}
}
//保存用户名和密码
void QDlgLogin::writeSettings(){
QSettings settings("WWB-Qt","Login");
settings.setValue("Username",m_user);
settings.setValue("PSDW",m_pswd);
settings.setValue("saved",ui->checkBox->isChecked());//保存用户名按钮被勾选后
}
//自定义加密函数
QString QDlgLogin::encrypt(const QString &str)
{ //字符串MD5算法加密
QByteArray btArray;
btArray.append(str);//加入原始字符串
QCryptographicHash hash(QCryptographicHash::Md5); //Md5加密算法
hash.addData(btArray); //添加数据到加密哈希值
QByteArray resultArray =hash.result(); //返回最终的哈希值
QString md5 =resultArray.toHex();//转换为16进制字符串
return md5;
}
#ifndef QDLGLOGIN_H
#define QDLGLOGIN_H
#include
#include
#include
#include
#include
#include
#include
namespace Ui {
class QDlgLogin;
}
class QDlgLogin : public QDialog
{
Q_OBJECT
public:
explicit QDlgLogin(QWidget *parent = nullptr);
~QDlgLogin();
private slots:
void on_OkBtn_clicked();//按下确定键
void on_CancleBtn_clicked();//按下取消键
private:
Ui::QDlgLogin *ui;
bool m_moving=false;//表示窗口是否在鼠标操作下移动
QPoint m_lastPos; //上一次的鼠标位置
QString m_user="xdu"; //初始化用户名
QString m_pswd="123456";//初始化密码,未加密的
int m_tryCount=0; //试错次数
void readSettings(); //读取设置,从注册表
void writeSettings();//写入设置,从注册表
QString encrypt(const QString& str);//字符串加密
};
#endif // QDLGLOGIN_H