文章目录
前言
我们在登录过程中,经常会碰到需要输入验证码进行登录验证的情景。本篇,作者将分享自己如何使用QT制作一个随机生成四位验证码的窗口。
一、实现效果
- 通过单击窗口,可以随机生成由数字、大小写字母组成的验证码。

二、需求分析
(1)随机生成四位由数字、大小写字母组成的字符。
(2)绘制各种颜色的轻微干扰用户识别验证码的点和线。
(3)单击验证码窗口,重新生成干扰点、干扰线,以及验证字符。
三、解决方案
(1)使用srand函数初始化随机种子,再使用rand函数生成随机数,最后加上字母和数字的ascii码。

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

(3)继承鼠标按下事件函数,当鼠标点击窗口时,验证码自动刷新并重新绘制新验证码

四、完整源码
1.main.cpp
#include"widget.h"#include"verify.h"#include<QApplication>intmain(int argc,char*argv[]){
QApplication a(argc, argv);
verify w;
w.show();return a.exec();}
2.verify.h
#ifndefVERIFY_H#defineVERIFY_H#include<QFrame>#include<QString>#include<QPaintEvent>#include<QMouseEvent>classverify:publicQFrame{
Q_OBJECT
public:verify();voidgenerateRandNum();voidpaintEvent(QPaintEvent *);voidmousePressEvent(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);}elseif(num ==1){//大写字母int temp ='A';this->code +=static_cast<QChar>(temp +qrand()%26);}elseif(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学习】如何随机生成登录验证码?(完整源码)的所有内容,希望大家阅读后都能有所收获!原创不易,转载请标明出处,若文章出现有误之处,欢迎读者留言指正批评!

版权归原作者 孤生i 所有, 如有侵权,请联系我们删除。