【qt】启动窗口的玩法

2024-06-15 1255阅读

启动窗口的玩法

  • 一.应用场景
  • 二.界面类设计窗口
  • 三.main中创建
  • 四.窗口显示标识
  • 五.功能实现
    • 1.读取注册表
    • 2.md5加密
    • 3.登录实现
    • 4.保存注册表
    • 5.功能演示
    • 六.鼠标事件拖动窗口
      • 1.找到鼠标事件的函数
      • 2.点击事件
      • 3.移动事件
      • 4.释放事件
      • 七.总结

        一.应用场景

        一般我们的软件和应用都会一个登录界面或者加载界面,然后再到我们真正的界面,所以这节课我们来学习如何自定义一个启动窗口,和那些需要注意的地方!

        二.界面类设计窗口

        【qt】启动窗口的玩法

        用Label来添加背景图片

        【qt】启动窗口的玩法

        【qt】启动窗口的玩法

        三.main中创建

        【qt】启动窗口的玩法

        运行结果:

        【qt】启动窗口的玩法

        但是现在点击登录和取消没有用,可以去转到槽.

        【qt】启动窗口的玩法

        现在就能够点击了!

        四.窗口显示标识

        但是发现现在还有一个窗口主题,我们可以去掉,让其更美观

        【qt】启动窗口的玩法

        下面的任务栏还在

        【qt】启动窗口的玩法

        这种模式就都没有了!

        【qt】启动窗口的玩法

        【qt】启动窗口的玩法

        五.功能实现

        1.读取注册表

        为了演示我们的功能,我们来使用注册表来读取信息.

        【qt】启动窗口的玩法

        具体实现:

        void DialogLogin::loadSetting()
        {
            QSettings setting("YAO","GE");//相当于两层目录
            m_user=setting.value("user_name","yaoguolin").toString();//user_name为字段,如果没有找到信息就"yaoguolin"默认
            m_pwd=setting.value("pwd","123456").toString();
            m_saved=setting.value("saved",false).toBool();
            
            if(m_saved==true)//如果勾选保存下次登录就把用户名自动的加上
            {
                ui->lineEditUserName->setText(m_user);
                ui->checkBox->setCheckState(Qt::Checked);
            }
        }
        

        2.md5加密

        但是这里有一点不安全就是密码直接保存,因此我们需要使用md5算法来提高密码安全性!

        【qt】启动窗口的玩法

        QString DialogLogin::encrypt(const QString& pwd)
        {
            QByteArray array;
            array.append(pwd);//将原始密码添加进来
            
            //用md5模式创建加密对象
            QCryptographicHash hash(QCryptographicHash::Md5);
            hash.addData(array);//添加加密数据
            QByteArray res=hash.result();//返回加密结果
            QString str=res.toHex();//转换为16进制字符串返回
            return str;
        }
        

        可以用在这里了

        【qt】启动窗口的玩法

        3.登录实现

        void DialogLogin::on_pushButtonOK_clicked()
        {
            QString user=ui->lineEditUserName->text().trimmed();
            QString pwd=ui->lineEditPWD->text().trimmed();
            
            if(user==m_user&&encrypt(pwd)==m_pwd)
            {
                accept();//登录成功
                //我们要将输入的信息保存到注册表
                
            }
            else
            {
                m_count++;
                if(m_count>3)//大于3次直接退出程序
                {
                    QMessageBox::critical(this,"严重错误","用户名或密码输入错误多次!");
                    reject();
                }
                else
                {
                    QMessageBox::warning(this,"错误","用户名或密码错误!");
                }
            }
            
        }
        

        4.保存注册表

        void DialogLogin::saveSetting()
        {
            QSettings setting("YAO","GE");//必须与刚刚创建的一样
            setting.setValue("user_name",m_user);//字段必须一样
            setting.setValue("pwd",m_pwd);
            setting.setValue("saved",ui->checkBox->checkState());
        }
        

        5.功能演示

        完整代码:

        #include "dialoglogin.h"
        #include "ui_dialoglogin.h"
        #include //注册表
        #include //md5
        #include 
        DialogLogin::DialogLogin(QWidget *parent) :
            QDialog(parent),
            ui(new Ui::DialogLogin)
        {
            ui->setupUi(this);
            this->setAttribute(Qt::WA_DeleteOnClose);//关闭窗口时销毁
            ui->lineEditPWD->setEchoMode(QLineEdit::Password);//输入密码时,看不到
            //this->setWindowFlags(Qt::FramelessWindowHint);//去掉主题栏,任务栏还在
            this->setWindowFlags(Qt::SplashScreen);//都没有了
            
            loadSetting();
        }
        DialogLogin::~DialogLogin()
        {
            delete ui;
        }
        void DialogLogin::on_pushButtonOK_clicked()
        {
            QString user=ui->lineEditUserName->text().trimmed();
            QString pwd=ui->lineEditPWD->text().trimmed();
            
            if(user==m_user&&encrypt(pwd)==m_pwd)
            {
                accept();//登录成功
                //我们要将输入的信息保存到注册表
                saveSetting();
            }
            else
            {
                m_count++;
                if(m_count>3)//大于3次直接退出程序
                {
                    QMessageBox::critical(this,"严重错误","用户名或密码输入错误多次!");
                    reject();
                }
                else
                {
                    QMessageBox::warning(this,"错误","用户名或密码错误!");
                }
            }
            
        }
        void DialogLogin::on_pushButtonCancel_clicked()
        {
            reject();
        }
        void DialogLogin::loadSetting()
        {
            QSettings setting("YAO","GE");//相当于两层目录
            m_user=setting.value("user_name","yaoguolin").toString();//user_name为字段,如果没有找到信息就"yaoguolin"默认
            m_pwd=setting.value("pwd",encrypt("123456")).toString();
            m_saved=setting.value("saved",false).toBool();
            
            if(m_saved==true)//如果勾选保存下次登录就把用户名自动的加上
            {
                ui->lineEditUserName->setText(m_user);
                ui->checkBox->setCheckState(Qt::Checked);
            }
        }
        QString DialogLogin::encrypt(const QString& pwd)
        {
            QByteArray array;
            array.append(pwd);//将原始密码添加进来
            
            //用md5模式创建加密对象
            QCryptographicHash hash(QCryptographicHash::Md5);
            hash.addData(array);//添加加密数据
            QByteArray res=hash.result();//返回加密结果
            QString str=res.toHex();//转换为16进制字符串返回
            return str;
        }
        void DialogLogin::saveSetting()
        {
            QSettings setting("YAO","GE");//必须与刚刚创建的一样
            setting.setValue("user_name",m_user);//字段必须一样
            setting.setValue("pwd",m_pwd);
            setting.setValue("saved",ui->checkBox->checkState());
        }
        

        运行结果:

        【qt】启动窗口的玩法

        【qt】启动窗口的玩法

        密码正确就进入主窗口:

        【qt】启动窗口的玩法

        下次登录自动输入了用户名:

        【qt】启动窗口的玩法

        六.鼠标事件拖动窗口

        当我们将主题栏去掉以后,我们就不能对窗口进行拖动了,但是我们可以通过鼠标事件来移动我们的窗口.

        1.找到鼠标事件的函数

        在widget中

        【qt】启动窗口的玩法

        【qt】启动窗口的玩法

        拷贝到窗口头文件中:

        【qt】启动窗口的玩法

        2.点击事件

        void DialogLogin::mousePressEvent(QMouseEvent *event)
        {
            if(event->button()==Qt::LeftButton)//如果左击鼠标
            {
                this->moved=true;//开始移动
                lastPos=event->globalPos()-this->pos();//鼠标的全局位置-窗口的左上角的位置=鼠标在窗口的相对位置
            }
            return QDialog::mousePressEvent(event);//返回给父类
        }
        

        3.移动事件

        void DialogLogin::mouseMoveEvent(QMouseEvent *event)
        {
            if(this->moved)//如果点击了,移动函数就启动
            {
                this->move(event->globalPos()-lastPos);//鼠标当前的全局位置减去刚刚的相对位置的距离就是窗口移动的距离
                lastPos=event->globalPos()-pos();//新的相对位置
            }
            return QDialog::mouseMoveEvent(event);
        }
        

        4.释放事件

        void DialogLogin::mouseReleaseEvent(QMouseEvent *event)
        {
            this->moved=false;//松开按键就关闭移动
            return QDialog::mouseReleaseEvent(event);
        }
        

        【qt】启动窗口的玩法

        现在我们的窗口就可以移动了,你也去试试吧,哈哈哈,记得鼠标事件加个QMouseEvent的头文件哦.

        七.总结

        启动窗口的玩法,用在的地方还是蛮多的,不管是为了加载资源,还是说为了登录验证,都会用到这个,因为可以是自定义的嘛,所有你们可以充分的发挥出你们的想象力!

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]