9、Qt使用随机验证码

一、新建项目

创建一个"Qt Widget Application"项目,基类选择“QMainWindow”

二、自定义CaptchaLabel类

右击项目名,选择"Add New...”

C++ -> C++Class,点击“Choose”

更改类名CaptchaLabel,添加基类QLabel,点击“下一步”

默认,点击完成

更改captchalabel.h代码如下

#ifndef CAPTCHALABEL_H#define CAPTCHALABEL_H#include <QObject>#include <QLabel>class CaptchaLabel : public QLabel{public:explicit CaptchaLabel(QWidget* parent = nullptr);//获取随机数QString getRandNumber() { return m_randNumber; }void generateRandNumber(int num = 4);  //生成随机数protected:void paintEvent(QPaintEvent *event);  //绘制void mousePressEvent(QMouseEvent *event);  //鼠标按下private:QString m_randNumber;  //随机数};#endif // CAPTCHALABEL_H

更改captchalabel.cpp代码如下

#include "captchalabel.h"
#include <QDebug>
#include <QRandomGenerator>
#include <QTimer>
#include <QPainter>
#include <QTime>CaptchaLabel::CaptchaLabel(QWidget *parent) : QLabel(parent)
{this->setMinimumSize(100, 30);  //设置最小大小this->setStyleSheet("background-color:white;");  //白色背景//随机数种子初始化qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//生成随机数generateRandNumber();
}/**
* @brief CaptchaLabel::generateRandNum 生成随机数,默认是四个数
* @param num
*/
void CaptchaLabel::generateRandNumber(int num)
{m_randNumber.clear();for(int i = 0; i < num; i++){int num = qrand() % 3;if(num == 0)  //数字{m_randNumber += QString::number(qrand()%10);}else if(num == 1)  //大写字母{int temp = 'A';m_randNumber += static_cast<QChar>(temp + qrand()%26);}else if(num == 2)  //小写字母{int temp = 'a';m_randNumber += static_cast<QChar>(temp + qrand()%26);}}
}/**
* @brief CaptchaLabel::paintEvent 绘制验证码
*/
void CaptchaLabel::paintEvent(QPaintEvent *)
{QPainter painter(this);int num = m_randNumber.size();  //几个随机数int width = this->width();int height = this->height();//设置字体int size = (width/num) < height ? (width/num) : height;QFont font;font.setPixelSize(size);  //设置字体大小font.setItalic(true);  //设置字体倾斜font.setFamily(QString("楷体"));painter.setFont(font);  //若设置字体加粗,有的随机数会显示不全QPen pen;//绘制随机数for(int i = 0; i < num; i++){pen = QPen(QColor(qrand()%255, qrand()%255, qrand()%255));painter.setPen(pen);int y = (height-5-size) <= 0 ? 0 : (qrand()%(height-5-size));QRectF rect(width/num*i, y, width/num, size);//painter.drawRect(rect);  //测试时,查看矩形的位置及大小//在矩形rect中绘制大小为size的随机数painter.drawText(rect, Qt::AlignHCenter|Qt::AlignBottom, m_randNumber.at(i));}//绘制干扰点for(int i = 0; i < (num*25); i++){pen = QPen(QColor(qrand()%256, qrand()%256, qrand()%256));painter.setPen(pen);painter.drawPoint(qrand()%width, qrand()%height);}//绘制干扰线for(int i = 0; i < num; i++){pen = QPen(QColor(qrand()%256, qrand()%256, qrand()%256));painter.setPen(pen);painter.drawLine(qrand()%width, qrand()%height, qrand()%width, qrand()%height);}
}/*** @brief CaptchaLabel::mousePressEvent 鼠标点击时更换随机数* @param event*/
void CaptchaLabel::mousePressEvent(QMouseEvent *event){Q_UNUSED(event);//重新生成验证码generateRandNumber();//实时更新update();
}

三、使用自定义CaptchaLabel类

在项目的界面编辑器中添加一个QLabel,右击,提升为

输入类名,点击“添加”

出现如下红框中的内容,点击“提升”

label的基类被更改为自定义CaptchaLabel类

再在界面上添加一个QLineEdit和QPushButton控件,再进行垂直布局

右击PushButton,选择“转到槽”

选择“clicked()”,点击“OK”

生成如下代码

更改代码如下

四、运行测试

运行项目

验证码大小随着界面大小更改而更改

点击label,验证码会改变

输入正确的验证码(区分大小写),点击“PushButton”,输出“验证码正确”提示信息

输入错误的验证码(区分大小写),点击“PushButton”,输出“验证码错误”提示信息

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

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

相关文章

【代码随想录算法训练营-第三天】【链表】203,707,206

203.移除链表元素 一遍AC 没什么难度&#xff0c;记住如何定义、使用链表&#xff0c;链表中的节点&#xff1b;记住链表移除的操作代码&#xff1b;了解虚拟头节点的用法&#xff1b; class Solution {public ListNode removeElements(ListNode head, int val) {if(head n…

HT7183 高功率异步升压转换器 中文资料

HT7183是一款高功率异步升压转换器&#xff0c;集成120mΩ功率开关管&#xff0c;为便携式系统提供G效的小尺寸处理方案。HT7183具有2.6V至5.5V输入电压范围&#xff0c;可为各类不同供电的应用提供支持。HT7183具备3A开关电流能力&#xff0c;并且能够提供高达16V的输出电压。…

C#/.NET/.NET Core优秀项目和框架2023年11月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架&#xff08;公众号每周至少推荐两个优秀的项目和框架当然节假日除外&#xff09;&#xff0c;公众号推文有项目和框架的介绍、功能特点以及部分截图等&#xff08;打不开或者打开GitHub很慢的同学可以优先查看…

Python搭建代理IP池实现接口设置与整体调度

目录 前言 1. 搭建免费代理IP爬虫 2. 将获取到的代理IP存储到数据库中 3. 构建一个代理IP池 4. 实现调度器来调度代理IP池 5. 实现带有代理IP池的爬虫 总结 前言 在网络爬虫中&#xff0c;代理IP池是一个非常重要的组件。由于许多网站对单个IP的请求有限制&#xff0c;…

客户满意的黄金法则:10个让您一击即中的服务技巧!

在当今日益竞争激烈的商业世界中&#xff0c;提供出色的客户服务是保持企业成功的关键。无论您是一家大型公司、一家小型创业企业&#xff0c;还是个人品牌&#xff0c;客户服务都是建立持久关系、增加忠诚度和获取推荐的必备条件。 那么&#xff0c;如何做好客户服务呢&#x…

练习11-简单卷积器的设计

简单卷积器的设计 1&#xff0c;任务目的&#xff1a;2&#xff0c;明确设计任务2.1,目前这部分代码两个文件没找到&#xff0c;见第5、6节&#xff0c;待解决中。 &#xff0c;卷积器的设计&#xff0c;RTL&#xff1a;con1.v4&#xff0c;前仿真和后仿真&#xff0c;测试信号…

mapbox Marker添加自定义html

思路就是先渲染出空div使用getElementsByClassName找到点&#xff0c;之后使用insertAdjacentHTML(‘beforeend’, div) 加自定义内容。 const el document.createElement(div);// 添加一个标记el.className j_icon;const itemIcon new MapboxGl.Marker({element: el,}).set…

JVM垃圾回收机制GC

一句话介绍GC&#xff1a; 自动释放不再使用的内存 一、判断对象是否能回收 思路一&#xff1a;引用计数 给这个对象里安排一个计数器&#xff0c; 每次有引用指向它&#xff0c; 就把计数器1&#xff0c; 每次引用被销毁&#xff0c;计数器-1&#xff0c;当计数器为0的时候…

文献速递 | CAR-T细胞助力增强前列腺癌肿瘤细胞抗肿瘤能力

前列腺癌是男性泌尿生殖系统最常见的恶性肿瘤&#xff0c;在全球&#xff0c;前列腺癌的发病率在男性所有恶性肿瘤中高居第2位&#xff0c;仅次于肺癌。免疫检查点分子转化生长因子受体II&#xff08;TGFβRII&#xff09;、T细胞免疫球蛋白和粘蛋白结构域3&#xff08;TIM3&am…

QT中如何使用自定义控件

在 Qt 中&#xff0c;要使用自定义控件&#xff0c;需要遵循以下步骤&#xff1a; 创建自定义控件&#xff1a; 首先&#xff0c;需要创建一个自定义控件类&#xff0c;该类继承自 QWidget 或 QGraphicsItem 等基本控件类&#xff0c;并实现其相关函数和槽函数等。 在头文件中…

python--namedtuple

namedtuple(具名元组) namedtuple是tuple的升级,目的是解决元组内部的数据进行命名的问题,为了说明namedtuple的优点,我们先看一下tuple的例子,如下代码,声明了课程的元祖,但是元组中两项内容没有说明,如果其他人看到代码不知道意思是什么 course = ("Python教程…

【带讲解】同校不同命,差个代号差好多!

今天分享的是23年哈尔滨工程大学815的信号与系统试题及解析。同样是哈尔滨工程大学&#xff0c;信号部分810着实比815难了很多&#xff01;但是815还有一门电路&#xff0c;压力也不小&#xff0c;两个代号各有利弊&#xff01; 小马哥Tips&#xff1a; 本套试卷难度分析&…

通过流量分析,明确医院重要主机中毒详情

故障现象 医院系统内部发现有一台重要主机持续产生了大量的连接失败数&#xff0c;主机IP为192.xxx.xxx.37&#xff0c;持续时间从2023年11月23日20&#xff1a;00持续到2023年11月24日10&#xff1a;00&#xff0c;十点后管理人员发现并封禁了该IP地址。 分析目的 针对医院…

项目部署到线上服务器后,报 Redis error: ERR unknown command del 错误

查了很多资料&#xff0c;终于解决了&#xff0c;问题出在redis.conf里&#xff0c;该文件里被添加了新的命令如下&#xff1a; 在这几句命令前加 # 号注释掉&#xff0c;重启即可解决 另附上相关redis的命令&#xff1a; 停止Redis&#xff1a;systemctl stop redis启动Redis…

【算法刷题】Day11

文章目录 面试题 08.01. 三步问题题干&#xff1a;算法原理&#xff1a;1、状态表示2、状态转移方程3、初始化4、填表顺序5、返回值 代码&#xff1a; 209. 长度最小的子数组题干&#xff1a;算法原理&#xff1a;1、暴力枚举出所有的子数组的和2、利用单调性&#xff0c;使用“…

大数据项目——基于Django协同过滤算法的房源可视化分析推荐系统的设计与实现

大数据项目——基于Django协同过滤算法的房源可视化分析推荐系统的设计与实现 技术栈&#xff1a;大数据爬虫/机器学习学习算法/数据分析与挖掘/大数据可视化/Django框架/Mysql数据库 本项目基于 Django框架开发的房屋可视化分析推荐系统。这个系统结合了大数据爬虫、机器学习…

拼多多电商平台API接口,关键词搜索热销商品,获取商品id、销量、sku、库存演示案例

拼多多关键词搜索商品的重要性主要体现在以下几个方面&#xff1a; 提高商品曝光率&#xff1a;关键词搜索能够将商品与用户进行匹配&#xff0c;用户通过搜索关键词找到自己需要的商品。因此&#xff0c;如果商品的关键词能够准确地描述商品的特点和功能&#xff0c;并且排在…

建筑设计全过程碳排放计算与案例分析

“30/60双碳目标”已成为我国绿色发展的新国策&#xff0c;建筑业对碳排放量化分析和减排也越来越重视。特别是全文强制性国标标准《建筑节能与可再生能源利用通用规范》GB55015-2021的实施&#xff0c;对建设项目可行性研究报告、建设方案和初步设计要求进行建筑碳排放分析&am…

100G数据中心升级改造策略

视频流媒体的兴起和物联网设备的大幅增长带来数据量爆炸性增长&#xff0c;人们对算力的需求越来越大&#xff0c;网络的升级改造也成为每个数据中心关注的重点。为了应对网络压力&#xff0c;数据中心需要升级到100G及以上速率&#xff0c;为企业和用户提供高性能计算、存储和…

Python读写XML文件:深入解析与技术实现

目录 一、引言 二、XML文件基础 1、XML文件结构 2、XML文件语法规则 三、Python读取XML文件 1、使用内置库xml.etree.ElementTree 2、使用第三方库lxml 四、Python写入XML文件 1、使用内置库xml.etree.ElementTree 五、注意事项 六、总结 一、引言 XML&#xff08;…