QT 实现登录框

一、记录我自己做的登录框

包含功能:设置无边框、背景图片、动态图片、登录验证、程序图标、记住密码等功能。

1.LoginDialog.h

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include <MoveDialog.h>
#include <QtSql>
#include <SqlOperate.h>
#include <classManage.h>
#include <ChangePassword.h>
#include <Regist.h>
#include <QApplication>
#include <QDir>
#include <QGraphicsDropShadowEffect>
#include "Login.h"
#include "SuperUser.h"

namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT

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

public slots:
    void on_btnClose_clicked();

    void on_btnZoom_clicked();

    void on_btnSafeLogin_clicked();

    void on_btnRegist_clicked();

    void on_btnFindPassword_clicked();

private slots:
    void on_btnRemember_stateChanged(int arg1);
    
private:
    QString    m_Username;
    QString    m_Password;
    QString    str_1;
    QString    str_2;
    bool       m_Remember;
private:
    Ui::LoginDialog *ui;
};

#endif // LOGINDIALOG_H

2.LoginDialog.cpp

#include "LoginDialog.h"
#include "ui_LoginDialog.h"
#include <QLineEdit>
#include <QTimer>
#include <QPalette>
#include <QBrush>
#include <QPainter>
#include <QFont>
#include <QMessageBox>
#include <QShortcut>
#include <QKeyEvent>
#include <QMovie>
#include <QSettings>
#include<QDebug>

#pragma execution_character_set("utf-8")

LoginDialog::LoginDialog(QWidget *parent)
    :ui(new Ui::LoginDialog)
{
    ui->setupUi(this);

    setAttribute(Qt::WA_TranslucentBackground);//背景透明
    //设置无边框,点击图标栏可放大缩小
    setWindowFlags(Qt::Window|Qt::FramelessWindowHint\
                   |Qt::WindowMinimizeButtonHint|Qt::WindowMaximizeButtonHint);
    
    //设置背景提示
    ui->editUsername->setPlaceholderText("请输入账号");
    ui->editPassword->setPlaceholderText("请输入密码");

    //密码显示黑圆圈
    ui->editPassword->setEchoMode(QLineEdit::Password);

    //label添加动态图片
    QMovie *movie=new QMovie(":/qrc/pig.gif");
    ui->labHead->setMovie(movie);
    ui->labHead->setScaledContents(true);
    movie->start();

    //拿到控件的字体属性,设置字间距
    QFont font = ui->btnSafeLogin->font();
    font.setLetterSpacing(QFont::AbsoluteSpacing ,15);
    ui->btnSafeLogin->setFont(font);
    
    //鼠标停留显示提示
    ui->btnClose->setToolTip("关闭");
    ui->btnZoom->setToolTip("最小化");

    //记住密码功能:读取配置文件
    QSettings setting("userInfo/config.ini",QSettings::IniFormat);
    m_Username = setting.value("Login/userName").toString();
    ui->editUsername->setText(m_Username);
    m_Password = setting.value("Login/passWord").toString();
    ui->editPassword->setText(m_Password);
    m_Remember = setting.value("Login/remeber").toBool();
    //上次勾选,则初始化为已勾选,否则不设置
    if(m_Remember)
    {
        ui->btnRemember->setChecked(true);
    }
    else
    {
        ui->editPassword->clear();
    }
}

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

void LoginDialog::on_btnClose_clicked()
{

    this->close();
}

//最小化
void LoginDialog::on_btnZoom_clicked()
{

    this->setWindowState(Qt::WindowMinimized);
}

void LoginDialog::on_btnSafeLogin_clicked()
{
    //超级用户
   SuperUser *superUser = new SuperUser;
   //老师、学生
   //classManage *classmange = new classManage;
   str_1 = ui->editUsername->text();
   str_2 = ui->editPassword->text();

   if(str_1 == Q_NULLPTR)
   {
       QMessageBox::information(this,"提示","请你输入账号后再登录");
   }
   else if(str_2 == Q_NULLPTR)
   {
       QMessageBox::information(this,"提示","请你输入密码后再登录");
   }

   //人工设置此账号为超级用户
   if(str_1 == "daboluo" && str_2 == "520803")
   {
       //存储正确的用户名与密码,并在此写入
       m_Username = str_1;
       m_Password = str_2;
       on_btnRemember_stateChanged(1);

       this->close();
       superUser->exec();
   }

}

void LoginDialog::on_btnRegist_clicked()
{
    
}

void LoginDialog::on_btnFindPassword_clicked()
{
    
}

//在登录框中检测是否点击记住密码
void LoginDialog::on_btnRemember_stateChanged(int arg1)
{
    QString binPath = QDir::currentPath();
    qDebug()<<"LoginDialog:147 "<<binPath;

    //勾选进行存储
    if(arg1=ui->btnRemember->isChecked())
    {
        QSettings setting("userInfo/config.ini",QSettings::IniFormat);//读配置文件
        setting.beginGroup(tr("Login"));
        setting.setValue("userName",m_Username);//设置key和value,也就是参数和值
        setting.setValue("passWord",m_Password);
        setting.setValue("remeber",true);
        setting.endGroup();//节点结束
        qDebug()<<"记住密码";
    }
    //不勾选进行标记,下次打开后也不勾选
    else
    {
        QSettings setting("userInfo/config.ini",QSettings::IniFormat);//读配置文件
        setting.beginGroup(tr("Login"));
        setting.setValue("remeber",false);
        setting.endGroup();//节点结束
        qDebug()<<"不记住密码";
    }
}

 

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的C++应用程序架,可以用于开发图形界面程序。要实现一个Shell写作,我们可以使用Qt提供的一些类和方法。 首先,我们可以使用QPlainTextEdit类创建一个多行文本编辑,用于显示用户输入的命令和Shell的输结果。这个类提供了一些方法,如appendPlainText()可以用于向文本中追加内容,以显示Shell的输。 其次,我们需要使用QProcess类来执行Shell命令。QProcess是Qt提供的一个进程类,可以用于启动外部进程并与之进行通信。通过调用QProcess的start()方法,我们可以指定要执行的Shell命令,然后通过readyReadStandardOutput()信号来获取Shell的输结果。 另外,为了方便用户输入命令,我们可以使用QLineEdit类创建一个单行输入,用户可以在这里输入Shell命令。在输入中按下回车键后,我们可以通过QLineEdit的returnPressed()信号来捕获用户输入的命令,然后将其发送给QProcess执行。 最后,为了更好地组织界面,我们可以使用布局管理器来放置文本编辑和输入Qt提供了很多布局管理器,如QVBoxLayout和QHBoxLayout,可以将控件按照垂直或水平方向进行排列。 因此,我们可以根据上述思路,在Qt实现一个Shell写作。用户可以在输入中输入Shell命令,然后执行后在文本编辑中显示结果。这样,用户就可以在图形界面中方便地使用Shell命令操作系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值