您好,登錄后才能下訂單哦!
這篇“QT如何生成隨機(jī)驗證碼”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“QT如何生成隨機(jī)驗證碼”文章吧。
一、先創(chuàng)建一個QT應(yīng)用程序,在ui中添加一個QFrame控件,后期將這個控件提升為下面自己實現(xiàn)驗證碼的類就可以顯示出來了。
示例代碼如下:
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(); }
主函數(shù):
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設(shè)計師類,在里面實現(xiàn)驗證碼的隨機(jī)生成。
代碼如下:
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; 返回一個字符串(默認(rèn)全為小寫)(驗證碼) QChar produceRandomLetters() const; //隨機(jī)產(chǎn)生一個字符 void produceVerificationCodes() const; //這是一個用來生成驗證碼的函數(shù) void produceRandomColors() const; //產(chǎn)生隨機(jī)的顏色 void paintEvent(QPaintEvent *event); //重寫繪制事件,以此來生成驗證碼 Qt::GlobalColor* getColor(); //返回設(shè)置驗證碼的顏色 void Timer_Timeout(); QString getCaptcha(); private: const int letter_number = 4; //產(chǎn)生字符的數(shù)量 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) { //生成隨機(jī)種子 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; //背景設(shè)為白色 painter.fillRect(this->rect(), Qt::white); //產(chǎn)生4個不同的字符 produceVerificationCodes(); //產(chǎn)生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; }
三、在主函數(shù)里面添加如下代碼:
**.h
Verification *verification;
**.cpp
void VLoginDlg::on_btnClick_clicked() //點擊更新驗證碼 { verification->Timer_Timeout(); }
運行效果圖
當(dāng)點擊最右端按鈕時,驗證碼會自動刷新
以上就是關(guān)于“QT如何生成隨機(jī)驗證碼”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。