QT设置文本为图形验证码(带干扰线)

GetRandomNumber是获取不重复的随机数列表,你们自己 实现吧;

下面直接上代码:

//设置图形验证码
void SetPicCode(QString sPicCode)
{
    if(sPicCode.isEmpty())
    {
        qDebug()<label->rect();//获取label的rect

    QPen pen = painter.pen();
    pen.setWidth(1);
    pen.setColor(Qt::darkRed); // 设置画笔为黄色
    painter.setPen(pen); // 设置画笔

    int nCount =18;//设置横坐标个数,两个坐标一条线

    QList nIndexList = GetRandomNumber(nCount,nCount); //获取下标列表-随机-不重复
    QList numbersList = GetRandomNumber(rect.width(),nCount); //获取横坐标列表-随机-不重复

        //画干扰线
    for (int i=0; i<(nCount/2); i++)
    {
        QPoint pt1,pt2;
        pt1.setX(numbersList[i]);
        pt1.setY(0);//顶部的点

        pt2.setX(numbersList[nCount-1-i]);
        pt2.setY(rect.height());//底部的点

        if(i%2==0)
        {
            painter.drawLine(pt2, pt1);
        }
        else
        {
            painter.drawLine(pt1, pt2);
        }
    }

    //改变画笔和字体
    pen.setColor(Qt::darkRed);
    QFont font = painter.font();
    font.setBold(true);//加粗
    font.setPixelSize(36);//改变字体大小

    painter.setPen(pen);
    painter.setFont(font);

    painter.drawText(image.rect(),Qt::AlignCenter,sPicCode);//设置文本

    ui->label->setPixmap(QPixmap::fromImage(image));
}

 

 

你可能感兴趣的:(QT)