【QT学习】如何随机生成登录验证码?(完整源码)

这篇具有很好参考价值的文章主要介绍了【QT学习】如何随机生成登录验证码?(完整源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

   我们在登录过程中,经常会碰到需要输入验证码进行登录验证的情景。本篇,作者将分享自己如何使用QT制作一个随机生成四位验证码的窗口。


一、实现效果

  • 通过单击窗口,可以随机生成由数字、大小写字母组成的验证码。
    【QT学习】如何随机生成登录验证码?(完整源码)

二、需求分析

(1)随机生成四位由数字、大小写字母组成的字符。

(2)绘制各种颜色的轻微干扰用户识别验证码的点和线。

(3)单击验证码窗口,重新生成干扰点、干扰线,以及验证字符。

三、解决方案

(1)使用srand函数初始化随机种子,再使用rand函数生成随机数,最后加上字母和数字的ascii码。

【QT学习】如何随机生成登录验证码?(完整源码)

(2)通过painter类自带的画点函数、画线函数、绘制文本函数和随机数综合使用,生成不同颜色图像

【QT学习】如何随机生成登录验证码?(完整源码)
(3)继承鼠标按下事件函数,当鼠标点击窗口时,验证码自动刷新并重新绘制新验证码

【QT学习】如何随机生成登录验证码?(完整源码)

四、完整源码

1.main.cpp

#include "widget.h"
#include "verify.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    verify w;
    w.show();

    return a.exec();
}

2.verify.h

#ifndef VERIFY_H
#define VERIFY_H

#include <QFrame>
#include <QString>
#include <QPaintEvent>
#include <QMouseEvent>

class verify : public QFrame
{
    Q_OBJECT
public:
    verify();
    void generateRandNum();
    void paintEvent(QPaintEvent *);
    void mousePressEvent(QMouseEvent *event);
    QString code;
};

#endif // VERIFY_H

3.verify.cpp

#include <QTime>
#include <QChar>
#include <QPainter>
#include <QtGlobal>
#include "verify.h"

verify::verify()
{
    //验证码窗口初始化
    this->setFixedSize(180,80);
    this->setStyleSheet("background-color:white;");
    this->setLineWidth(1);
    this->setMidLineWidth(2);
    this->setFrameShape(QFrame::Box);
    this->setFrameShadow(QFrame::Raised);

    //随机数种子初始化
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

    //生成随机数
    this->generateRandNum();
}

void verify::generateRandNum()
{
    this->code.clear();
    for(int i = 0;i < 4;++i)
    {
        int num = qrand()%3;
        if(num == 0)
        {
            //数字
            this->code += QString::number(qrand()%10);
        }
        else if(num == 1)
        {
            //大写字母
            int temp = 'A';
            this->code += static_cast<QChar>(temp + qrand()%26);
        }
        else if(num == 2)
        {
            //小写字母
            int temp = 'a';
            this->code += static_cast<QChar>(temp + qrand()%26);
        }
    }
}

void verify::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QPen pen;
    QFont font("楷体",25,QFont::Bold,true);
    painter.setFont(font);

    //画点
    for(int i=0;i<100;i++)
    {
        pen = QPen(QColor(qrand()%256,qrand()%256,qrand()%256));
        painter.setPen(pen);
        painter.drawPoint(qrand()%180,qrand()%80);
    }

    //画线
    for(int i=0;i<5;i++)
    {
        pen = QPen(QColor(qrand()%256,qrand()%256,qrand()%256));
        painter.setPen(pen);
        painter.drawLine(qrand()%180,qrand()%80,qrand()%180,qrand()%80);
    }

    //绘制验证码
    for(int i=0;i<4;i++)
    {
        pen = QPen(QColor(qrand()%255,qrand()%255,qrand()%255));
        painter.setPen(pen);
        painter.drawText(15+35*i,10+qrand()%15,30,40,Qt::AlignCenter, QString(code[i]));
    }
}

void verify::mousePressEvent(QMouseEvent *event)
{
	//重新生成验证码
    generateRandNum();
    //实时更新
    update();
}


总结

   以上就是【QT学习】如何随机生成登录验证码?(完整源码)的所有内容,希望大家阅读后都能有所收获!原创不易,转载请标明出处,若文章出现有误之处,欢迎读者留言指正批评!

【QT学习】如何随机生成登录验证码?(完整源码)文章来源地址https://www.toymoban.com/news/detail-476623.html

到了这里,关于【QT学习】如何随机生成登录验证码?(完整源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java案例----生成随机验证码

    在登录中常常会需要用到验证码,那你知道如何生成随机的验证码码? 本次的需求是生成一个由字母和数字组成的验证码,其中字母可以大小写或者重复需占4为大小,数字为0-9中的任意一个,只占1位大小,但是数字的位置可以任何位置,主要思路就是将需要用到的元素存入

    2024年02月11日
    浏览(45)
  • Python 生成随机图片验证码

    在写一个Web项目的时候一般要写登录操作,而为了安全起见,现在的登录功能都会加上输入图片验证码这一功能,在利用Django开发Web项目的过程中,可以使用 Python 生成一个如下所示的图片验证码: pillow详细内容参考官方文档:https://pillow.readthedocs.io/en/stable/?badge=latest pillow的

    2024年02月15日
    浏览(39)
  • Pillow模块——生成随机验证码

    2024年02月03日
    浏览(33)
  • Java生成四位数随机验证码

    我们生活中登录的时候都要输入验证码,这些验证码是为了增加注册或者登录难度,减少被人用脚本疯狂登录注册导致的一系列危害,减少数据库的一些压力。 毕竟那些用脚本生成的账号都是垃圾账号 本次实践:生成这样的验证码 并且附带一些干扰线 我们生成一个验证码有

    2024年01月17日
    浏览(24)
  • SpringBoot整合jwt+redis+随机验证码+Vue的登录功能

    !注意:前端的Vue项目中要引入element-ui和axios # npm安装element-ui、axios npm insatll element-ui -S npm install axios -S # 在main中引入

    2024年02月10日
    浏览(29)
  • QT生成固定长度的随机字符串

    最近项目中有一个需要使用QT生成固定长度随机字符串的需求,需求也很简单,就是生成一个n位的仅包含0-9以及大写字母的字符串,因为这也是第一次使用QT自身的随机数,这里就做一下简单记录。 废话不多说,直接上代码。 View Code  这段代码逻辑也很简单,以当前的时间戳

    2024年03月13日
    浏览(52)
  • 【手机号验证/前端】Vue2+elementUI编写一个手机号验证码登录页面,路由式开发(附完整代码)

    目录 效果图: 一、template部分 二、style样式 三、script部分 1.先对手机号的格式进行一个判断 2.接下来就是表单验证规则rules 3.最后就是methods了 (1)首先我们给获取验证码绑定一个方法 (2)然后封装一个axios接口,方便后面测试联调(这部分每个人封装的都不一样) (3)然

    2024年02月17日
    浏览(36)
  • C#生成自定义登录验证码(微信公众号验证码,邮箱验证码等)

    本文只讲解自定义验证码生成的实现,其他两种见我其他文章。 在项目上线使用时,网络对外警察后受到攻击,特别是尝试各种密码组合对用户名密码登录的暴力破解,需要增加验证码来增加用户信息的安全性。 ps:注意生成的验证码要具备时效性,设置3-5分钟失效,或登录

    2024年02月16日
    浏览(29)
  • C++随机数生成:std标准库和Qt自带方法

    std::rand() 是C++中的一个随机数函数,它生成一个范围在0到 RAND_MAX 之间的伪随机整数。 在每次程序运行时,通常需要使用不同的种子值来初始化随机数生成器。可以使用 std::srand() 函数来设置种子值。 设置种子的目的是为了引入随机性,使得每次程序运行时生成不同的随机数

    2024年01月16日
    浏览(45)
  • 使用QT C++编写一个随机生成网络ip地址的程序

    根据网络搜索结果¹²³,使用QT C++编写一个随机生成网络ip地址的程序的示例代码可能如下: ```cpp #include QCoreApplication #include QRandomGenerator #include QDebug int main(int argc, char *argv[]) {     QCoreApplication a(argc, argv);     // 使用QRandomGenerator类来生成随机数     QRandomGenerator *generator =

    2023年04月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包