Qt 验证码功能

首先在.h里对这几个函数进行声明

public:
    void paintEvent(QPaintEvent *event);        //绘画事件
    void mousePressEvent(QMouseEvent *event);   //鼠标点击事件重载
    void GetCapt();                             //验证码

其次在.cpp进行实现,对验证码内容存入数组的操作不能放在paintevent里面,否则会进入死循环数组内容一直刷新导致验证码一直输入不正确。

在构造函数里使用一次以下函数,这是刚进入窗口时的第一次

this->GetCapt();

之后每次进行鼠标点击图片都会进行刷新验证码

void Login::mousePressEvent(QMouseEvent *event)       //鼠标点击事件
{
    
    
    this->GetCapt();
    update();
}

void Login::GetCapt()                    //生成验证码数 数组
{
    
    
    code.clear();
    //随机数字
    for(int i = 0;i < 4;++i)
    {
    
    
        int num = qrand()%3;
        if(num == 0)
        {
    
    
            //数字
            code += QString::number(qrand()%10);
         }
         else if(num == 1)
         {
    
    
            //大写字母
            int temp = 'A';
            code += static_cast<QChar>(temp + qrand()%26);
          }else if(num == 2)
          {
    
    
             //小写字母
             int temp = 'a';
             code += static_cast<QChar>(temp + qrand()%26);
           }
   }
}

void Login::paintEvent(QPaintEvent *event)            //绘画
{
    
    

    QPainter painter(this);
    QPen pen;

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

     //画线
     for(int i = 0;i < 10;++i)
     {
    
    
         painter.drawLine(qrand()%150,qrand()%50,qrand()%150,qrand()%50);
     }

     pen = QPen(QColor(255,0,0,100));
     QFont font("楷体",25,QFont::Bold,true);
     painter.setFont(font);
     painter.setPen(pen);
     //绘画字
     for(int i = 0;i < 4;++i)
     {
    
    
       painter.drawText(10+30*i,5,30,40,Qt::AlignCenter,
                             QString(code[i]));
      }
      qDebug()<<code;
}

猜你喜欢

转载自blog.csdn.net/weixin_45907789/article/details/106991163