【qt】启动窗口的玩法

启动窗口的玩法

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

一.应用场景

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

二.界面类设计窗口

在这里插入图片描述
Label来添加背景图片
在这里插入图片描述
在这里插入图片描述

三.main中创建

在这里插入图片描述
运行结果:
在这里插入图片描述
但是现在点击登录和取消没有用,可以去转到槽.

在这里插入图片描述
现在就能够点击了!

四.窗口显示标识

但是发现现在还有一个窗口主题,我们可以去掉,让其更美观
在这里插入图片描述
下面的任务栏还在
在这里插入图片描述
这种模式就都没有了!
在这里插入图片描述
在这里插入图片描述

五.功能实现

1.读取注册表

为了演示我们的功能,我们来使用注册表来读取信息.
在这里插入图片描述
具体实现:

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算法来提高密码安全性!
在这里插入图片描述

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;
}

可以用在这里了
在这里插入图片描述

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 <QSettings>//注册表
#include <QCryptographicHash>//md5
#include <QMessageBox>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());
}

运行结果:
在这里插入图片描述
在这里插入图片描述
密码正确就进入主窗口:
在这里插入图片描述
下次登录自动输入了用户名:
在这里插入图片描述

六.鼠标事件拖动窗口

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

1.找到鼠标事件的函数

widget
在这里插入图片描述
在这里插入图片描述
拷贝到窗口头文件中:
在这里插入图片描述

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);
}

在这里插入图片描述

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

七.总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/850699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战项目《负载均衡在线OJ系统》

一、项目灵感来源 在日常做题的过程中&#xff0c;我们总会去力扣和牛客网上去做题&#xff0c;但是从来没有想过网站是如何加载给用户的&#xff0c;以及在提交代码时&#xff0c;是如何得知我们的代码是否正确。基于这样的原因&#xff0c;也是学习到一定程度的知识后&#x…

python中的循环语句

while循环 基本语法格式 while 条件&#xff1a; 循环体 条件为真&#xff0c;则执行循环体代码 条件为假&#xff0c;则结束循环 打印 1-10的整数 死循环有时候也是必须的&#xff0c; while语句的语法&#xff1a; &#xff08;1&#xff09;变量的初始化&#xff0c;…

你知道又美又飒的英歌队头槌女孩吗?无标题

今天是文化和自然遗产日&#xff0c;本“ 人民体验官 ”推广人民日报官方微博文化产品《 16岁英歌队头槌女孩又美又飒》。 截图&#xff1a;来源“ 人民体验官 ”推广平台 郑梓欣是汕头潮阳西门女子英歌队的“头槌”。在2024年春节英歌舞展演巡游活动中&#xff0c;汕头潮阳西…

MySQL第二种实现方式:现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果

接上篇&#xff1a;链接: 现在有一个生产计划&#xff0c;甲乙丙3个品类共16个产品&#xff0c;生产时间6天&#xff0c;每天甲品类可以生产1张单&#xff0c;乙3张&#xff0c;丙1张&#xff0c;请用MySQL写出H列的效果 第二种写法&#xff1a; -- 使用WITH子句创建CTE WITH…

Spark参数配置不合理的情况

1.1 内存设置 &#x1f4be; 常见的内存设置有两类&#xff1a;堆内和堆外 &#x1f4a1; 我们作业中大量的设置 driver 和 executor 的堆外内存为 4g&#xff0c;造成资源浪费 &#x1f4c9;。 通常 executor 堆外内存在 executor.cores1 的时候&#xff0c;1g 足够了&…

UltraEditUEStudio软件最新版下载及详细安装教程

UEStudio简介&#xff1a; UEStudio建立在上文本编辑器UltraEdit的功能基础上&#xff0c;并为团队和开发人员提供了其他功能&#xff0c;例如深度Git集成。您可以直接在UEStudio中克隆&#xff0c;签出&#xff0c;更新&#xff0c;提交&#xff0c;推入/拉入等操作&#xff…

再回首:我的创作纪念日3周年回顾

机缘 我与CSDN三周年博客纪念 大家好&#xff01;今天&#xff0c;我非常高兴地在这里向大家分享我与CSDN三周年博客纪念的喜悦和成果。在这三年里&#xff0c;我坚持不懈地在CSDN上分享了我的技术成果和心得&#xff0c;积累了超过2000篇的博客文章。这一路上&#xff0c;我…

Invalid JSON text:“Invalid value.“ at position 0 in value for column ‘user.info

你们好&#xff0c;我是金金金。 场景 我正在练习mybatis-plus&#xff0c;在插入一条数据的时候报错了&#xff0c;错误信息如上图 排查 排查之前我先贴一下代码 以下为数据库字段类型 在插入的过程中报错&#xff1a;Data truncation: Invalid JSON text: "Invalid val…

python中的函数递归

函数递归&#xff0c;就是一个函数&#xff0c;自己调用自己。 如上图所示&#xff0c;是一段通过定义函数&#xff0c;编写函数体来实现for循环。实现的是从1到n的累乘。即求n的阶乘&#xff0c; 如上图所示&#xff0c;是一段函数的递归来实现1到n的累乘操作&#xff0c;将1*…

opencv快速安装以及各种查看版本命令

安装opencv并查看其版本&#xff0c;直接通过一个可执行文件实现。 #!/bin/bashwget https://codeload.github.com/opencv/opencv/zip/3.4 -O opencv-3.4.zip && unzip opencv-3.4.zip && cd opencv-3.4 && \mkdir build && cd build &&a…

Sentinel不使用控制台基于注解限流,热点参数限流

目录 一、maven依赖 二、控制台 三、基于注解限流 四、热点参数限流 五、使用JMeter验证 一、maven依赖 需要注意&#xff0c;使用的版本需要和你的SpringBoot版本匹配&#xff01;&#xff01; Spring-Cloud直接添加如下依赖即可&#xff0c;baba已经帮你指定好版本了。…

海洋日特别活动—深海来客——可燃冰

深海中有一种神奇的物质&#xff0c;似冰又不是冰。 别看它其貌不扬&#xff0c;但本领不小&#xff0c;遇火即燃&#xff0c;能量巨大&#xff0c;可谓是能源家族的新宠。它就是被国务院正式批准列为我国第173个矿种的“可燃冰”&#xff01; 可燃冰到底是个啥&#xff1f;它…

把chatgpt当实习生,进行matlab gui程序编程

最近朋友有个项目需要整点matlab代码&#xff0c;无奈自己对matlab这种工科的软件完全是外行&#xff0c;无奈只有求助gpt这种AI助手了。大神们告诉我们&#xff0c;chatgpt等的助手已经是大学实习生水平啦&#xff0c;通过多轮指令交互就可以让他帮你完成工作啦&#xff01;所…

时隔很久运行苍穹外卖项目,出现很多错误

中途运行了很多其他项目&#xff0c;maven的配置文件还被我修改了一次。导致再次运行苍穹外卖项目出现很多错误。 发现没有办法&#xff0c;把本地的仓库删了个干干净净。然后点击clean发现报错&#xff1a; Cannot access alimaven (http://mavejavascript:void(0);n.aliyun.…

k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装

文章目录 前言VPA简介简单理解详细解释VPA的优缺点优点1.自动化资源管理2.资源优化3.性能和稳定性提升5.成本节约6.集成性和灵活性 缺点1.Pod 重启影响可用性2.与 HPA 冲突3.资源监控和推荐滞后&#xff1a;4.实现复杂度&#xff1a; 核心概念Resource Requests 和 Limits自动调…

学会python——九九乘法表+斐波那契数列(python实例一)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 pycharm编译 2、九九乘法表 2.1 代码构思 2.2 代码示例 2.3 运行结果 3、斐波那契数列 3.1 代码构思 3.2 代码示例 3.3 运行结果 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对…

Nginx部署多web进程

1、nginx介绍 Nginx是一个高性能的、开源的、跨平台的Web服务器和反向代理服务器。它是由俄罗斯的程序员Igor Sysoev开发的&#xff0c;并于2004年首次公开发布。 Nginx的特点包括&#xff1a; 高性能&#xff1a;Nginx使用事件驱动的架构&#xff0c;能够处理大量的并发连接…

人月神话纪念珍藏版系列文章一:焦油坑

前言: 在史前文明,没有什么场景比巨兽们在焦油坑中垂死挣扎的场景更让人震撼。恐龙、猛犸象在焦油坑中挣扎。他们挣扎的越猛烈,焦油就缠绕的越紧,没有那种猛兽足够强壮或者具有足够的技巧,能够挣脱出来,它们最后都淹没在坑中。 最近几十年的大型系统编程就犹如这样的一个…

百度高级项目经理洪刘生受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 百度在线网络技术&#xff08;北京&#xff09;有限公司IDG智能驾驶业务部高级项目经理洪刘生先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“互联网PMO赋能战略项目集管理实战分享”。大会将于6月29-30日在北京举办…

clickHouse实现表自增ID的代码及相关逻辑

一、介绍 clickHourse表自增ID主要时两种方式&#xff1a; insert数据时&#xff0c;手动维护一个全局ID给表设置uuid字段&#xff0c;使用 generateUUIDv4()函数赋予默认值。 这里的话推荐手动维护一个全局的自增ID&#xff0c;不推荐使用UUID的方式&#xff0c;主要原因有…