国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)

這篇具有很好參考價(jià)值的文章主要介紹了【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


前言

???我們?cè)诘卿涍^(guò)程中,經(jīng)常會(huì)碰到需要輸入驗(yàn)證碼進(jìn)行登錄驗(yàn)證的情景。本篇,作者將分享自己如何使用QT制作一個(gè)隨機(jī)生成四位驗(yàn)證碼的窗口。


一、實(shí)現(xiàn)效果

  • 通過(guò)單擊窗口,可以隨機(jī)生成由數(shù)字、大小寫字母組成的驗(yàn)證碼。
    【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)

二、需求分析

(1)隨機(jī)生成四位由數(shù)字、大小寫字母組成的字符。

(2)繪制各種顏色的輕微干擾用戶識(shí)別驗(yàn)證碼的點(diǎn)和線。

(3)單擊驗(yàn)證碼窗口,重新生成干擾點(diǎn)、干擾線,以及驗(yàn)證字符。

三、解決方案

(1)使用srand函數(shù)初始化隨機(jī)種子,再使用rand函數(shù)生成隨機(jī)數(shù),最后加上字母和數(shù)字的ascii碼。

【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)

(2)通過(guò)painter類自帶的畫點(diǎn)函數(shù)、畫線函數(shù)、繪制文本函數(shù)和隨機(jī)數(shù)綜合使用,生成不同顏色圖像

【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)
(3)繼承鼠標(biāo)按下事件函數(shù),當(dāng)鼠標(biāo)點(diǎn)擊窗口時(shí),驗(yàn)證碼自動(dòng)刷新并重新繪制新驗(yàn)證碼

【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)

四、完整源碼

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()
{
    //驗(yàn)證碼窗口初始化
    this->setFixedSize(180,80);
    this->setStyleSheet("background-color:white;");
    this->setLineWidth(1);
    this->setMidLineWidth(2);
    this->setFrameShape(QFrame::Box);
    this->setFrameShadow(QFrame::Raised);

    //隨機(jī)數(shù)種子初始化
    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

    //生成隨機(jī)數(shù)
    this->generateRandNum();
}

void verify::generateRandNum()
{
    this->code.clear();
    for(int i = 0;i < 4;++i)
    {
        int num = qrand()%3;
        if(num == 0)
        {
            //數(shù)字
            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);

    //畫點(diǎn)
    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);
    }

    //繪制驗(yàn)證碼
    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)
{
	//重新生成驗(yàn)證碼
    generateRandNum();
    //實(shí)時(shí)更新
    update();
}


總結(jié)

???以上就是【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)的所有內(nèi)容,希望大家閱讀后都能有所收獲!原創(chuàng)不易,轉(zhuǎn)載請(qǐng)標(biāo)明出處,若文章出現(xiàn)有誤之處,歡迎讀者留言指正批評(píng)!

【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-476623.html

到了這里,關(guān)于【QT學(xué)習(xí)】如何隨機(jī)生成登錄驗(yàn)證碼?(完整源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java實(shí)現(xiàn)隨機(jī)生成驗(yàn)證碼

    java實(shí)現(xiàn)隨機(jī)生成驗(yàn)證碼

    運(yùn)行結(jié)果:

    2024年02月14日
    瀏覽(23)
  • Java案例----生成隨機(jī)驗(yàn)證碼

    Java案例----生成隨機(jī)驗(yàn)證碼

    在登錄中常常會(huì)需要用到驗(yàn)證碼,那你知道如何生成隨機(jī)的驗(yàn)證碼碼? 本次的需求是生成一個(gè)由字母和數(shù)字組成的驗(yàn)證碼,其中字母可以大小寫或者重復(fù)需占4為大小,數(shù)字為0-9中的任意一個(gè),只占1位大小,但是數(shù)字的位置可以任何位置,主要思路就是將需要用到的元素存入

    2024年02月11日
    瀏覽(19)
  • Java生成四位數(shù)隨機(jī)驗(yàn)證碼

    Java生成四位數(shù)隨機(jī)驗(yàn)證碼

    我們生活中登錄的時(shí)候都要輸入驗(yàn)證碼,這些驗(yàn)證碼是為了增加注冊(cè)或者登錄難度,減少被人用腳本瘋狂登錄注冊(cè)導(dǎo)致的一系列危害,減少數(shù)據(jù)庫(kù)的一些壓力。 畢竟那些用腳本生成的賬號(hào)都是垃圾賬號(hào) 本次實(shí)踐:生成這樣的驗(yàn)證碼 并且附帶一些干擾線 我們生成一個(gè)驗(yàn)證碼有

    2024年01月17日
    瀏覽(18)
  • SpringBoot整合jwt+redis+隨機(jī)驗(yàn)證碼+Vue的登錄功能

    SpringBoot整合jwt+redis+隨機(jī)驗(yàn)證碼+Vue的登錄功能

    !注意:前端的Vue項(xiàng)目中要引入element-ui和axios # npm安裝element-ui、axios npm insatll element-ui -S npm install axios -S # 在main中引入

    2024年02月10日
    瀏覽(22)
  • QT生成固定長(zhǎng)度的隨機(jī)字符串

    QT生成固定長(zhǎng)度的隨機(jī)字符串

    最近項(xiàng)目中有一個(gè)需要使用QT生成固定長(zhǎng)度隨機(jī)字符串的需求,需求也很簡(jiǎn)單,就是生成一個(gè)n位的僅包含0-9以及大寫字母的字符串,因?yàn)檫@也是第一次使用QT自身的隨機(jī)數(shù),這里就做一下簡(jiǎn)單記錄。 廢話不多說(shuō),直接上代碼。 View Code ?這段代碼邏輯也很簡(jiǎn)單,以當(dāng)前的時(shí)間戳

    2024年03月13日
    瀏覽(28)
  • 【手機(jī)號(hào)驗(yàn)證/前端】Vue2+elementUI編寫一個(gè)手機(jī)號(hào)驗(yàn)證碼登錄頁(yè)面,路由式開(kāi)發(fā)(附完整代碼)

    【手機(jī)號(hào)驗(yàn)證/前端】Vue2+elementUI編寫一個(gè)手機(jī)號(hào)驗(yàn)證碼登錄頁(yè)面,路由式開(kāi)發(fā)(附完整代碼)

    目錄 效果圖: 一、template部分 二、style樣式 三、script部分 1.先對(duì)手機(jī)號(hào)的格式進(jìn)行一個(gè)判斷 2.接下來(lái)就是表單驗(yàn)證規(guī)則rules 3.最后就是methods了 (1)首先我們給獲取驗(yàn)證碼綁定一個(gè)方法 (2)然后封裝一個(gè)axios接口,方便后面測(cè)試聯(lián)調(diào)(這部分每個(gè)人封裝的都不一樣) (3)然

    2024年02月17日
    瀏覽(21)
  • C#生成自定義登錄驗(yàn)證碼(微信公眾號(hào)驗(yàn)證碼,郵箱驗(yàn)證碼等)

    C#生成自定義登錄驗(yàn)證碼(微信公眾號(hào)驗(yàn)證碼,郵箱驗(yàn)證碼等)

    本文只講解自定義驗(yàn)證碼生成的實(shí)現(xiàn),其他兩種見(jiàn)我其他文章。 在項(xiàng)目上線使用時(shí),網(wǎng)絡(luò)對(duì)外警察后受到攻擊,特別是嘗試各種密碼組合對(duì)用戶名密碼登錄的暴力破解,需要增加驗(yàn)證碼來(lái)增加用戶信息的安全性。 ps:注意生成的驗(yàn)證碼要具備時(shí)效性,設(shè)置3-5分鐘失效,或登錄

    2024年02月16日
    瀏覽(16)
  • 使用QT C++編寫一個(gè)隨機(jī)生成網(wǎng)絡(luò)ip地址的程序

    根據(jù)網(wǎng)絡(luò)搜索結(jié)果123,使用QT C++編寫一個(gè)隨機(jī)生成網(wǎng)絡(luò)ip地址的程序的示例代碼可能如下: ```cpp #include QCoreApplication #include QRandomGenerator #include QDebug int main(int argc, char *argv[]) { ? ? QCoreApplication a(argc, argv); ? ? // 使用QRandomGenerator類來(lái)生成隨機(jī)數(shù) ? ? QRandomGenerator *generator =

    2023年04月08日
    瀏覽(37)
  • C++隨機(jī)數(shù)生成:std標(biāo)準(zhǔn)庫(kù)和Qt自帶方法

    std::rand() 是C++中的一個(gè)隨機(jī)數(shù)函數(shù),它生成一個(gè)范圍在0到 RAND_MAX 之間的偽隨機(jī)整數(shù)。 在每次程序運(yùn)行時(shí),通常需要使用不同的種子值來(lái)初始化隨機(jī)數(shù)生成器。可以使用 std::srand() 函數(shù)來(lái)設(shè)置種子值。 設(shè)置種子的目的是為了引入隨機(jī)性,使得每次程序運(yùn)行時(shí)生成不同的隨機(jī)數(shù)

    2024年01月16日
    瀏覽(42)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包