QT实现验证码功能

头文件:

    QPushButton *m_checkBtn;
    QLineEdit       *m_checkEdt;

源文件:

    m_checkBtn = new QPushButton(this);
    m_checkBtn->setDisabled(true);
    m_checkBtn->setObjectName("loginNameBtn");
    m_checkEdt = new QLineEdit(this);
    m_checkEdt->setObjectName("checkLineEdit");
    m_checkEdt->setMaxLength(6);
    m_checkEdt->setPlaceholderText(QStringLiteral("验证码"));


重载void paintEvent(QPaintEvent *event);

void LoginDlg::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    painter.fillRect(180, 203, 64, 24, Qt::lightGray);

    painter.setFont(QFont("Comic Sans MS"));

    for (int i = 0; i < 100; i++)
    {
        painter.setPen(m_color[i % 4]);
        painter.drawPoint(180 + (qrand() % 64), 203 + (qrand() % 24));
    }

    for (int i = 0; i < 4; i++)
    {
        painter.setPen(m_color[i]);
        painter.drawText(180 + 15 * i, 203, 15, 24, Qt::AlignCenter, QString(m_captcha[i]));
    }
}

//验证码变换函数

QString LoginDlg::getCaptcha(){
    QString ret = "";

    for (int i = 0; i < 4; i++){
        int c = (qrand() % 2) ? 'a' : 'A';
        ret += static_cast(c + qrand() % 26);
    }

    return ret;
}

//颜色变换函数

Qt::GlobalColor* LoginDlg::getColor(){
    static Qt::GlobalColor colors[4];

    for (int i = 0; i < 4; i++){
        colors[i] = static_cast((qrand() % 16) + 2);
    }

    return colors;
}

//调用函数:

void LoginDlg::onRefreashCheckCode() {
    m_captcha = getCaptcha();
    m_color = getColor();
    repaint();
}

你可能感兴趣的:(【QT】特殊控件)