在设计软件时,需要用到一些简单的登录界面,本文是基于QT的一个登录界面,使用Qsettings类读取Config文件来记录用户账号密码。
话不多说,先上代码。
#ifndef LOGIN_H
#define LOGIN_H
#include <QDialog>
#include <QMessageBox>
#include <QSettings>
#include <QDebug>
namespace Ui {
class Login;
}
class Login : public QDialog
{
Q_OBJECT
public:
explicit Login(QWidget *parent = nullptr);
~Login();
private slots:
bool on_checkBox_clicked(); // 记住密码
void on_pushButton_login_clicked(); // 登录按钮
private:
void judge(); //判断是否记住
void write(QString flag);
QString readconfig();
void login(); // 登录函数
void writeConfig();
void read();
private:
Ui::Login *ui;
};
#endif // LOGIN_H
#include "login.h"
#include "ui_login.h"
Login::Login(QWidget *parent) :
QDialog(parent),
ui(new Ui::Login)
{
ui->setupUi(this);
login();
}
Login::~Login()
{
delete ui;
}
void Login::judge()
{
if(ui->usernameEdit->text().trimmed() == tr("urit") && ui->passwordEdit->text() == tr("urit"))
{
if(ui->checkBox->isChecked())
{
write("true");
}
else
{
ui->checkBox->setChecked(false);
}
qDebug() << "登录成功";
accept(); // 发送登录成功信号
}
else
{
QMessageBox::warning(this,"warning","Username or password error!");
// 清空内容
ui->usernameEdit->clear();
ui->passwordEdit->clear();
//定位光标
ui->usernameEdit->setFocus();
}
}
void Login::write(QString flag)
{
QString path = "login.ini";
on_checkBox_clicked();
QSettings *config = new QSettings(path, QSettings::IniFormat);
if(flag == "true")
{
config->beginGroup("config");
config->setValue("/username",ui->usernameEdit->text());
config->setValue("/password",ui->passwordEdit->text());
config->setValue("/isrembered","true");
config->endGroup();
}
}
QString Login::readconfig()
{
QString path = "login.ini";
QSettings *config = new QSettings(path, QSettings::IniFormat);
QString flag = config->value("/config/isrembered").toString();
qDebug() << flag;
return flag;
}
void Login::login()
{
QString flag;
flag = readconfig();
ui->passwordEdit->setEchoMode(QLineEdit::Password); //设置密码为黑圆点
if(flag == "true")
{
ui->checkBox->setChecked(true);
writeConfig();
}
}
void Login::writeConfig()
{
QString path = "login.ini";
QSettings *config = new QSettings(path, QSettings::IniFormat);
QString username;
QString password;
config->beginGroup("config");
username = config->value("/username").toString();
password = config->value("/password").toString();
ui->usernameEdit->setText(username);
ui->passwordEdit->setText(password);
config->endGroup();
}
void Login::read()
{
QString path = "login.ini";
QSettings *config = new QSettings(path, QSettings::IniFormat);
QString flag = config->value("/config/isrembered").toString(); // 数据丢失
qDebug() << flag;
}
bool Login::on_checkBox_clicked()
{
QString path = "login.ini";
QSettings *config = new QSettings(path, QSettings::IniFormat);
if(ui->checkBox->isChecked())
{
config->beginGroup("config");
config->setValue("/isrembered","true");
config->endGroup();
return 1;
}
else
{
config->beginGroup("config");
config->setValue("/isrembered","false");
config->endGroup();
return -1;
}
}
void Login::on_pushButton_login_clicked()
{
judge();
}
最后实现的效果展示
当一次登录输入正确密码,会创建对应的config文件,并且记录记住密码的标志位和正确的账号密码,如果勾选记住密码,在下一次登陆时会自动填写账号密码。
点击登录按钮,登录成功进入主界面:
#include <QApplication>
#include "widget.h"
#include "mainwindow.h"
#include "login.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//Widget w;
//w.show();
MainWindow m;
//m.show();
Login l;
if(l.exec() == QDialog::Accepted)
{
m.show();
return a.exec();
}
else
{
return 0;
}
}