作者:灰常奈-ping__ | 来源:互联网 | 2023-09-08 09:04
一、功能描述
1、输入用户名和密码进行操作
2、默认用户名(qwe)和默认密码(123)加密保存到本地
3、解释模式对话框,以及exec()的用法,accept()和accepted的概念2015.6.5 qt学习笔记 accept()概念_xdlichen的专栏-CSDN博客本篇,会重点讲述模式对话框,以及exec()的用法,accept()和accepted的概念。一.非模式对话框非模式对话框是和同一个程序中其它窗口操作无关的对话框。在字处理软件中查找和替换对话框通常是非模式的来允许同时与应用程序主窗口和对话框进行交互。调用show()来显示非模式对话框。show()立即返回,这样调用代码中的控制流将会继续。在实践中你将会经常调用showhttps://blog.csdn.net/xdlichen/article/details/46374517
二、项目创建
1、新建项目,选择“Qt Widgets Application”,点击“Choose”
2、输入项目名,选择文件路径,点击“下一步”
3、选择“Desktop...MinGW..”,点击“下一步”
4、文件名开头大写(个人习惯),点击“下一步”
5、点击“完成”
6、右击“LoginDialogAccept”->Add New...(添加新文件)
7、选择Qt -> Qt 设计师界面类
8、选择"Dialog without Buttons",点击“下一步”
9、文件名开头大写,点击“下一步”
10、点击“完成”
三、界面布局
1、双击“LoginDialog.ui”
2、 界面上拖拽一个“label”控件,,
更改text为“登录界面”,水平居中布局“AlignHCenter”
字体大小“25”,更改控件大小使字显示完全
3、拖拽两个“label”,分别更改text为“用户名:”、“密 码:” ;再拖拽两个“lineedit”
选中第一个lineedit,objectName更改为“usernameEdit”
水平居中布局“AlignHCenter”
选中第二个lineedit,objectName更改为“passwordEdit”
echoMode为“Password”,水平居中布局“AlignHCenter”
选中四个控件,点击“在窗体布局中布局”
4、拖拽两个pushButton,第一个pushButton,objectName更改为“loginButton”,text更改为“登录”
第二个pushButton,objectName更改为“exitButton”,text更改为“退出”
选中两个pushButton,点击“水平布局”
5、拖拽四个"Vertical Spacer",右击界面->布局->栅格布局
6、右击“登录”按键->转到槽->选择“clicked()”->点击“OK”
7、右击“退出”按键->转到槽->选择“clicked()”->点击“OK”
四、代码演示
1、main.cpp
#include "MainWindow.h"
#include
#include "LoginDialog.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);LoginDialog login;if (login.exec() == QDialog::Accepted) //当用户名和密码正确时,接收到Accepted信号{MainWindow w;w.show();return a.exec();}else{return 0;}
}
2、 LoginDialog.h
#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H#include namespace Ui {
class LoginDialog;
}class LoginDialog : public QDialog
{Q_OBJECTpublic:explicit LoginDialog(QWidget *parent = nullptr);~LoginDialog();private slots:void on_loginButton_clicked();void on_exitButton_clicked();private:Ui::LoginDialog *ui;QString m_qstrFileName; //文件名
};#endif // LOGINDIALOG_H
3、LoginDialog.cpp
#include "LoginDialog.h"
#include "ui_LoginDialog.h"
#include
#include
#include
#include LoginDialog::LoginDialog(QWidget *parent) :QDialog(parent),ui(new Ui::LoginDialog)
{ui->setupUi(this);//标题this->setWindowTitle("登录界面");//登录文件m_qstrFileName = QCoreApplication::applicationDirPath() + "/config.ini";//设置配置文件的目录和位置;如果没有,会自动创建QSettings setting(m_qstrFileName, QSettings::IniFormat);//如果文件不存在用户名和密码信息if (!(setting.contains(tr("login/username")) && setting.contains(tr("login/password")))){//用户名QByteArray byteUser = "qwe";QByteArray byteUserMd5 = QCryptographicHash::hash(byteUser, QCryptographicHash::Md5); //加密QString strUserMd5 = byteUserMd5.toHex();//密码QByteArray bytePwd = "123";QByteArray bytePwdMd5 = QCryptographicHash::hash(bytePwd, QCryptographicHash::Md5);QString strPwdMd5 = bytePwdMd5.toHex();//写入数据setting.beginGroup(tr("login"));//节点开始setting.setValue("username", strUserMd5); //设置key和value,也就是参数和值setting.setValue("password", strPwdMd5);}
}LoginDialog::~LoginDialog()
{delete ui;
}//登录
void LoginDialog::on_loginButton_clicked()
{if(ui->usernameEdit->text().isEmpty()){QMessageBox::critical(this, tr("提示"), tr("用户名不能为空"));return;}if(ui->passwordEdit->text().isEmpty()){QMessageBox::critical(this, tr("提示"), tr("密码不能为空"));return;}QSettings setting(m_qstrFileName, QSettings::IniFormat);//用户名QByteArray byteUser = ui->usernameEdit->text().toLatin1();QByteArray byteUserMd5 = QCryptographicHash::hash(byteUser, QCryptographicHash::Md5); //加密QString strUserMd5 = byteUserMd5.toHex(); //QByteArray 转 QString//用户名正确if (strUserMd5 == setting.value("/login/username").toString()){//密码QByteArray bytePwd = ui->passwordEdit->text().toLatin1();QByteArray bytePwdMd5 = QCryptographicHash::hash(bytePwd, QCryptographicHash::Md5);QString strPwdMd5 = bytePwdMd5.toHex();//密码正确if (strPwdMd5 == setting.value("/login/password").toString()){accept(); //用户名和密码正确发送accept()信号}else{QMessageBox::critical(this, tr("提示"), tr("密码输入错误"));ui->passwordEdit->setFocus(); //获取焦点}}else{QMessageBox::critical(this, tr("提示"), tr("用户名输入错误"));ui->usernameEdit->setFocus();}
}//退出
void LoginDialog::on_exitButton_clicked()
{//this->close();reject();
}
4、其他保持不变
五、运行测试
1、Ctrl+r,运行程序
2、当用户名不对时
3、当密码不对时
4、当用户名和密码都对时,登录界面关闭
MainWindow界面显示
5、在程序运行目录有个config.ini文件,存放着加密后的用户名和密码
六、代码下载
https://download.csdn.net/download/Viciower/36788383