【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.rhkb.cn/news/345599.html

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

相关文章

线性代数|机器学习-P11方程Ax=b求解研究

文章目录 1. 变量数和约束条件数大小分类2. 最小二乘法和Gram-schmidt变换2.1 Gram-schmidt变换2.2 最小二乘法2.2.1 损失函数-Lasso 和regression2.2.2 损失函数-Lasso2.2.3 损失函数-regression2.2.4 Regression岭回归-矩阵验证2.2.5 Regression岭回归-导数验证 3. 迭代和随机…

CS1061 “HtmlHelper”未包含“Partial”的定义,并且找不到可接受第一个“HtmlHelper”类型参数的可访问扩展方法“Partial”

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS1061 “HtmlHelper”未包含“Partial”的定义&#xff0c;并且找不到可接受第一个“HtmlHelper”类型参数的可访问扩展方法“Partial”(是否缺少 using 指令或程序集引用?) 14_Views_Message_E…

【车载开发系列】MCU选型

【车载开发系列】MCU选型 【车载开发系列】MCU选型 【车载开发系列】MCU选型一. 重要概念二. MCU选型的风险风险1风险2 三. MCU选型要点四. MCU选型维度五. MCU 选型需要考虑的因素1&#xff09;ROM/RAM2&#xff09;速度/主频3&#xff09;分析外设需求4&#xff09;工作电压(…

算法家族之一——二分法

目录 算法算法的打印效果如果算法里的整型“i”为1如果算法里的整型“i”为11 算法的流程图算法的实际应用总结 大家好&#xff0c;我叫 这是我58&#xff0c;现在&#xff0c;请看下面的算法。 算法 #define _CRT_SECURE_NO_WARNINGS 1//<--预处理指令 #include <stdi…

html--万年历

<!DOCTYPE html> <html lang"zh_CN"><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /><meta charset"utf-8" /><title>万年历</title><link rel"styles…

压力测试-性能指标-Jmeter使用-压力测试报告

文章目录 1.压测目的2.性能指标3.Jmeter3.1Jmeter使用3.1.1 运行Jmeter3.1.2 添加线程组3.1.3设置HTTP请求3.1.4 设置监视器 3.2 查看Jmeter压测结果3.2.1 查看结果树3.2.2 查看汇总报告3.2.3 查看聚合报告3.2.4 查看汇总图 1.压测目的 内存泄漏&#xff1a;OOM&#xff0c;重…

Llama模型家族之Stanford NLP ReFT源代码探索 (四)Pyvene论文学习

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

【嵌入式】波特率9600,发送8个字节需要多少时间,如何计算?

问题&#xff1a; 波特率9600&#xff0c;发送 01 03 00 00 00 04 44 09 (8字节) 需要多少时间&#xff0c;如何计算&#xff1f; 在计算发送数据的时间时&#xff0c;首先要考虑波特率以及每个字符的数据格式。对于波特率9600和标准的UART数据格式&#xff08;1个起始位&…

彩虹易支付最新版源码

源码简介 彩虹易支付最新版源码&#xff0c;更新时间为5.1号 2024/05/01&#xff1a; 1.更换全新的手机版支付页面风格 2.聚合收款码支持填写备注 3.后台支付统计新增利润、代付统计 4.删除结算记录支持直接退回商户金额 安装环境 1.PHP版本>7.4 2.Mysql数据库 安装教…

C++ Qt实现http url启动本地应用程序

更多Qt文章,请访问《深入浅出C++ Qt开发技术专栏》:https://blog.csdn.net/yao_hou/category_9276099.html 文章目录 1、注册自定义协议2、编写web页面3、编写C++应用程序我们在使用腾讯会议时经常会通过http链接打开本地的腾讯会议,例如下图: 打开会议发起人给的链接,会出…

⾃动化批量管理-Ansible

目录 一、ansible 简介 自动化工具选择 &#xff08;了解&#xff09;​编辑 1、ansible 是什么&#xff1f; 2、ansible 特点 3、ansible 架构图 二、ansible 任务执行 1、ansible 任务执行模式 2、ansible 执行流程 3、ansible 命令执行过程 三、ansible 配置详解 …

【iOS】UI学习——登陆界面案例、照片墙案例

文章目录 登陆界面案例照片墙案例 登陆界面案例 这里通过一个登陆界面来复习一下前面学习的内容。 先在接口部分定义两个UILabel、两个UITextField、两个UIButton按键&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewController {UILabel* _lb…

基于AT89C51单片机的红外防盗报警器设计

第一章 绪论1.1 选题背景 随着社会科学的不断进步和发展,人们生活水平得到很大的提高,对个人私有财产的保护越来越重视,因而对于防盗的措施提出了更高的要求。本设计就是为了满足现代生活防盗的需要而设计的应用于家庭、车库、仓库和保险柜等处进行防盗监控的无线防盗报警装…

【RAG入门教程03】Langchian框架-文档加载

Langchain 使用文档加载器从各种来源获取信息并准备处理。这些加载器充当数据连接器&#xff0c;获取信息并将其转换为 Langchain 可以理解的格式。 LangChain 中有几十个文档加载器&#xff0c;可以在这查看https://python.langchain.com/v0.2/docs/integrations/document_lo…

Hive日志介绍

日志描述 日志路径&#xff1a;Hive相关日志的默认存储路径为“/var/log/Bigdata/hive/角色名”&#xff0c;Hive1相关日志的默认存储路径为“/var/log/Bigdata/hive1/角色名”&#xff0c;以此类推。 HiveServer&#xff1a;“/var/log/Bigdata/hive/hiveserver”&#xff0…

【算法】常用排序算法(插入排序、希尔排序、堆排序、选择排序、冒泡排序、快速排序、归并排序、计数排序)超详细

排序算法是数据结构相关知识中非常重要的一节&#xff0c;相信很多小伙伴对这部分知识一知半解。那么接下来&#xff0c;小编就要带领大家一起来进行对排序算法的深入剖析学习&#xff0c;希望本篇文章能够使你有所收获&#xff01; 一.常见的排序算法 排序算法有很多种&#…

‘AndroidStudio工具平台’尝试运行‘Android原生项目’

AndroidStudio工具平台 (内嵌Intelli IDEA集成环境) /Users/haijunyan/Library/Android/sdk 配置环境变量: #adb命令&#xff0c;安装APK查看连接设备 platform-tools #emulator命令&#xff0c;通过命令创建模拟器 tools #用NDK框架搭建的项目&#xff0c;用到下面的命令编译 …

【Oracle】Oracle导入导出dmp文件

文章目录 前言一、什么是dmp&#xff1f;二、imp/impdp、exp/expdp对比及示例1.区别2.imp/impdp对比及示例a. impb. impbp 3.exp/expdp对比及示例a. expb.expdp 3.其他事项 三、执行导入导出前置条件1.创建角色并授权2.创建目录映射 前言 在工作中&#xff0c;经常会遇到需要备…

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件

Serif Affinity 2.5 (macOS, Windows) - 专业创意软件 Affinity Designer 2, Affinity Photo 2, Affinity Publisher 2 请访问原文链接&#xff1a;Serif Affinity 2.5 (macOS, Windows) - 专业创意软件&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

【数据结构(邓俊辉)学习笔记】图06——最小支撑树

文章目录 0. 概述1. 支撑树2. 最小支撑树3. 歧义性4. 蛮力算法5. Prim算法5.1 割与极短跨越边5.2 贪心迭代5.3 实例5.4 实现5.5 复杂度 0. 概述 学习下最小支撑树和prim算法。 1. 支撑树 最小的连通图是树。 连通图G的某一无环连通子图T若覆盖G中所有的顶点&#xff0c;则称…