QT生成随机验证码的方法

Florence ·
更新时间:2024-09-20
· 1989 次阅读

本文实例为大家分享了QT生成随机验证码的具体代码,供大家参考,具体内容如下

一、先创建一个QT应用程序,在ui中添加一个QFrame控件,后期将这个控件提升为下面自己实现验证码的类就可以显示出来了。

示例代码如下:

mainwindow.h

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "verification.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow {     Q_OBJECT public:     MainWindow(QWidget *parent = nullptr);     ~MainWindow(); private slots:     void on_pushButton_clicked(); private:     Ui::MainWindow *ui;     Verification *verification; }; #endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent)     : QMainWindow(parent)     , ui(new Ui::MainWindow) {     ui->setupUi(this);     verification = ui->frame;  //提升类控件名 } MainWindow::~MainWindow() {     delete ui; } void MainWindow::on_pushButton_clicked()    //点击跟新验证码 {      verification->Timer_Timeout(); }

主函数:

main.cpp

#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) {     QApplication a(argc, argv);     MainWindow w;     w.show();     return a.exec(); }

mainwindow.ui

二、右击新添加一个Qt设计师类,在里面实现验证码的随机生成。

代码如下:

verification.h

#ifndef VERIFICATION_H #define VERIFICATION_H #include <QPainter> #include <QTimer> #include <QFrame> #include <QChar> #include <QColor> class Verification : public QFrame {     Q_OBJECT public:     Verification(QWidget *parent = Q_NULLPTR);     ~Verification(); public:     QString getVerificationCodes() const;   返回一个字符串(默认全为小写)(验证码)     QChar produceRandomLetters() const;     //随机产生一个字符     void produceVerificationCodes() const;  //这是一个用来生成验证码的函数     void produceRandomColors() const;       //产生随机的颜色     void paintEvent(QPaintEvent *event);    //重写绘制事件,以此来生成验证码     Qt::GlobalColor* getColor();            //返回设置验证码的颜色     void Timer_Timeout();     QString getCaptcha(); private:     const int letter_number = 4;    //产生字符的数量     Qt::GlobalColor* m_color;     QString m_captcha;     QTimer m_timer;     enum {                          //枚举分类,也可自己定义            NUMBER_FLAG,            UPLETTER_FLAG,            LOWLETTER_FLAG        };     QChar *verificationCode;     QColor *colorArray; }; #endif // VERIFICATION_H

verification.cpp

#include "verification.h" #include <QTime> #include <QPaintEvent> Verification::Verification(QWidget *parent)     :QFrame(parent) {     //生成随机种子     qsrand(QTime::currentTime().second() * 1000 + QTime::currentTime().msec()); //    m_captcha = getVerificationCode(); //    m_color = getColor();     //    m_timer.start(200);     colorArray = new QColor[letter_number];     verificationCode = new QChar[letter_number];     m_captcha = getVerificationCodes(); } Verification::~Verification() { } ification::getVerificationCodes() const {     QString s ="";     QChar cTemp;     for (int i = 0; i < letter_number; ++i)     {         cTemp = verificationCode[i];         s += cTemp>97?cTemp.toUpper():cTemp;     }     return s; } QChar Verification::produceRandomLetters() const {     QChar c;     int flag = qrand() % letter_number;     switch (flag)     {     case NUMBER_FLAG:c='0' + qrand() % 10; break;     case UPLETTER_FLAG:c='A' + qrand() % 26; break;     case LOWLETTER_FLAG:c='a' + qrand() % 26; break;     default:c=qrand() % 2 ? 'W' : 'D';     }     return c; } void Verification::produceVerificationCodes() const {     for (int i = 0; i < letter_number; ++i)          verificationCode[i] = produceRandomLetters(); } void Verification::produceRandomColors() const {     for (int i = 0; i < letter_number; ++i)         colorArray[i] = QColor(qrand() % 255, qrand() % 255, qrand() % 255); } void Verification::Timer_Timeout() { //    m_captcha = getVerificationCode();     m_captcha = getVerificationCodes(); //    this->repaint();     this->update(); } QString Verification::getCaptcha() {     return getVerificationCodes(); } void Verification::paintEvent(QPaintEvent *event) {     painter(this);     QPoint p;     //背景设为白色     painter.fillRect(this->rect(), Qt::white);     //产生4个不同的字符     produceVerificationCodes();     //产生4个不同的颜色     produceRandomColors();     //绘制验证码     for (int i = 0; i < letter_number; ++i)     {         p.setX(i*(this->width() / letter_number)+this->width()/14);         p.setY(this->height() / 1.5);         painter.setPen(colorArray[i]);         painter.drawText(p, QString(verificationCode[i]));     }     return; }

三、在主函数里面添加如下代码:

**.h

 Verification *verification;

**.cpp

void VLoginDlg::on_btnClick_clicked()    //点击更新验证码 {     verification->Timer_Timeout(); }

运行效果图

当点击最右端按钮时,验证码会自动刷新



方法 验证码

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章