網(wǎng)站首頁 編程語言 正文
前言
本文實現(xiàn)了自定義的驗證碼輸入框控件。控件包括圖標(biāo)、輸入框、獲取驗證碼按鈕、驗證碼獲取倒計時標(biāo)簽。支持鼠標(biāo)點擊獲取驗證碼按鈕后開始顯示倒計時功能,倒計時為0時,才可以在此點擊獲取驗證碼按鈕。效果如圖:
主要的編程思想還是實現(xiàn)自定義控件的封裝性和共用性。
UI布局:
- 控件1:QWidget,實現(xiàn)整個控件的封裝,這個控件使用水平布局,實現(xiàn)控件的水平擺放,同時,當(dāng)其中一個控件隱藏時,位置會重新更新,實現(xiàn)在控件的后面只顯示獲取驗證碼和倒計時兩個控件中的一個。
- 控件2:QLabel,實現(xiàn)展示盾牌圖標(biāo)。
- 控件3:QLineEdit,實現(xiàn)驗證碼輸入功能。
- 控件4:QPushButton,實現(xiàn)獲取驗證碼功能。
- 控件5:QLabel,實現(xiàn)倒計時顯示。
頁面樣式初始化:
控件1:實現(xiàn)外邊框和背景: 邊框?qū)?像素,顏色#DBDBDB,背景顏色#FFFFFF。
setStyleSheet("QWidget#widget{border:1px solid #DBDBDB;background-color:#FFFFFF;}");
控件2:實現(xiàn)盾牌圖標(biāo)的展示: 圖片資源:image/vCode.png。
ui.lablevCode->setStyleSheet("border-image:url(image/vCode.png);");
控件3:實現(xiàn)驗證碼輸入功能: 無邊框,背景顏色#FFFFFF,字體顏色#333333。
ui.lineEdit->setStyleSheet("QLineEdit{border:0px;color:#333333;background:#FFFFFF;}");
控件4:實現(xiàn)獲取驗證碼按鈕: 無邊框,字體顏色#999999,鼠標(biāo)懸浮時字體顏色#3B85FF。
ui->pushButton->setStyleSheet("QPushButton{border:none;color:#999999;}" "QPushButton:hover{border:none;color:#3B85FF;}");
控件5:初始化隱藏(在沒有點擊獲取驗證碼按鈕時為隱藏狀態(tài),點擊獲取驗證碼按鈕后,顯示倒計時,隱藏獲取驗證碼按鈕)。字體顏色#b7b7b7。
ui->label_time->setStyleSheet("QLabel{color:#b7b7b7;}"); ui->label_time->hide();
除了這些控件外,我們還需要創(chuàng)建一個定時器,用來實現(xiàn)倒計時的功能,定時器的溢出時間為1s,定時器的槽函數(shù)為slotVCodeTimeout()。
//創(chuàng)建成員變量 QTimer *m_timer; //動態(tài)創(chuàng)建定時器,并指定定時器的溢出事件和槽函數(shù) m_vCodeTimer = new QTimer(this); connect(m_vCodeTimer, SIGNAL(timeout()), this, SLOT(slotVCodeTimeout())); m_vCodeTimer->setInterval(1000); // 1s
功能實現(xiàn):
1. 輸入限制:
不顯示上下文菜單,禁止輸入中文,默認顯示“請輸入驗證碼”,手機號只能是11位0~9的數(shù)字。
ui.lineEdit->setContextMenuPolicy (Qt::NoContextMenu); // 不顯示上下文菜單 ui.lineEdit->setAttribute(Qt::WA_InputMethodEnabled, false); // 設(shè)置禁止中文輸入 ui.lineEdit->setPlaceholderText(QString::fromLocal8Bit("請輸入驗證碼")); // 設(shè)置默認顯示內(nèi)容 QRegExp rx("[0-9]{1,8}"); // 正則表達式:數(shù)字, 8位 QRegExpValidator *validator = new QRegExpValidator(rx, this); ui.lineEdit->setValidator(validator);// 設(shè)置正則表達式
2.點擊獲取驗證碼按鈕,執(zhí)行獲取驗證碼操作:
在按鈕的點擊響應(yīng)函數(shù)中,調(diào)用獲取驗證碼的方法,通常是調(diào)用后臺接口,實現(xiàn)給指定手機號發(fā)送驗證碼的功能。這里可以發(fā)射一個信號,由控件外部響應(yīng)這個信號,再做相應(yīng)的操作,如判斷是否輸入手機號、手機號是否正確、調(diào)用后臺接口、判斷是否成功發(fā)送驗證碼等。
void VCodeLineEdit::on_pushButton_clicked() { //調(diào)用獲取驗證碼方法 }
3.隱藏獲取驗證碼按鈕,顯示倒計時:
ui->pushButton->hide();//隱藏獲取驗證碼按鈕 ui->label_time->show();//顯示倒計時標(biāo)簽 if (m_vCodeTimer->isActive())如果定時器已經(jīng)啟動,先停止定時器,再重新打開定時器 { m_vCodeTimer->stop(); } m_vCodeTimer->start(); //設(shè)置倒計時顯示的文本 ui->label_time->setText(QString::number(m_time) +QStringLiteral("s后重新發(fā)送"));
4.定時器響應(yīng)函數(shù):
這里定義了一個成員變量m_time,m_time的初始值設(shè)置為60(倒計時事件為60s)。每次定時器溢出,m_time的值減1,先判斷m_time是否已經(jīng)小于等于0。如果是,則表示倒計時結(jié)束,隱藏倒計時標(biāo)簽,重新顯示獲取驗證碼按鈕,并關(guān)閉定時器,重置m_time。如果沒有小于等于0,表示倒計時沒有結(jié)束,則更新倒計時顯示標(biāo)簽內(nèi)容。
m_time -= 1; if(m_time <= 0) { ui->label_time->hide(); ui->pushButton->show(); if (m_vCodeTimer->isActive()) { m_vCodeTimer->stop(); } m_time = 60; } else{ ui->label_time->setText(QString::number(m_time) +QStringLiteral("s后重新發(fā)送")); }
原文鏈接:https://juejin.cn/post/7080814380538920997
相關(guān)推薦
- 2022-09-18 iOS開發(fā)探索多線程GCD任務(wù)示例詳解_IOS
- 2021-12-29 CentOS系統(tǒng)rpm安裝Nginx和配置_nginx
- 2022-07-18 實現(xiàn)?Python?腳本生成命令行_python
- 2022-07-10 Executor 線程池技術(shù)詳解
- 2022-09-21 使用Python遍歷文件夾實現(xiàn)查找指定文件夾_python
- 2022-07-22 linux centos 7 vim配置詳解
- 2022-05-01 Android?模擬地圖定位功能的實現(xiàn)_Android
- 2023-02-05 Python?面向?qū)ο缶幊淘斀鈅python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支