QT简单登录界面的设计

在设计软件时,需要用到一些简单的登录界面,本文是基于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;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值