<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文實現了自定義的驗證碼輸入框控制元件。控制元件包括圖示、輸入框、獲取驗證碼按鈕、驗證碼獲取倒計時標籤。支援滑鼠點選獲取驗證碼按鈕後開始顯示倒計時功能,倒計時為0時,才可以在此點選獲取驗證碼按鈕。效果如圖:
主要的程式設計思想還是實現自定義控制元件的封裝性和共用性。
控制元件1:實現外邊框和背景: 邊框寬1畫素,顏色#DBDBDB,背景顏色#FFFFFF。
setStyleSheet("QWidget#widget{border:1px solid #DBDBDB;background-color:#FFFFFF;}");
控制元件2:實現盾牌圖示的展示: 圖片資源:image/vCode.png。
ui.lablevCode->setStyleSheet("border-image:url(image/vCode.png);");
控制元件3:實現驗證碼輸入功能: 無邊框,背景顏色#FFFFFF,字型顏色#333333。
ui.lineEdit->setStyleSheet("QLineEdit{border:0px;color:#333333;background:#FFFFFF;}");
控制元件4:實現獲取驗證碼按鈕: 無邊框,字型顏色#999999,滑鼠懸浮時字型顏色#3B85FF。
ui->pushButton->setStyleSheet("QPushButton{border:none;color:#999999;}" "QPushButton:hover{border:none;color:#3B85FF;}");
控制元件5:初始化隱藏(在沒有點選獲取驗證碼按鈕時為隱藏狀態,點選獲取驗證碼按鈕後,顯示倒計時,隱藏獲取驗證碼按鈕)。字型顏色#b7b7b7。
ui->label_time->setStyleSheet("QLabel{color:#b7b7b7;}"); ui->label_time->hide();
除了這些控制元件外,我們還需要建立一個定時器,用來實現倒計時的功能,定時器的溢位時間為1s,定時器的槽函數為slotVCodeTimeout()。
//建立成員變數 QTimer *m_timer; //動態建立定時器,並指定定時器的溢位事件和槽函數 m_vCodeTimer = new QTimer(this); connect(m_vCodeTimer, SIGNAL(timeout()), this, SLOT(slotVCodeTimeout())); m_vCodeTimer->setInterval(1000); // 1s
1. 輸入限制:
不顯示上下文選單,禁止輸入中文,預設顯示“請輸入驗證碼”,手機號只能是11位0~9的數位。
ui.lineEdit->setContextMenuPolicy (Qt::NoContextMenu); // 不顯示上下文選單 ui.lineEdit->setAttribute(Qt::WA_InputMethodEnabled, false); // 設定禁止中文輸入 ui.lineEdit->setPlaceholderText(QString::fromLocal8Bit("請輸入驗證碼")); // 設定預設顯示內容 QRegExp rx("[0-9]{1,8}"); // 正規表示式:數位, 8位元 QRegExpValidator *validator = new QRegExpValidator(rx, this); ui.lineEdit->setValidator(validator);// 設定正規表示式
2.點選獲取驗證碼按鈕,執行獲取驗證碼操作:
在按鈕的點選響應函數中,呼叫獲取驗證碼的方法,通常是呼叫後臺介面,實現給指定手機號傳送驗證碼的功能。這裡可以發射一個訊號,由控制元件外部響應這個訊號,再做相應的操作,如判斷是否輸入手機號、手機號是否正確、呼叫後臺介面、判斷是否成功傳送驗證碼等。
void VCodeLineEdit::on_pushButton_clicked() { //呼叫獲取驗證碼方法 }
3.隱藏獲取驗證碼按鈕,顯示倒計時:
ui->pushButton->hide();//隱藏獲取驗證碼按鈕 ui->label_time->show();//顯示倒計時標籤 if (m_vCodeTimer->isActive())如果定時器已經啟動,先停止定時器,再重新開啟定時器 { m_vCodeTimer->stop(); } m_vCodeTimer->start(); //設定倒計時顯示的文字 ui->label_time->setText(QString::number(m_time) +QStringLiteral("s後重新傳送"));
4.定時器響應函數:
這裡定義了一個成員變數m_time,m_time的初始值設定為60(倒計時事件為60s)。每次定時器溢位,m_time的值減1,先判斷m_time是否已經小於等於0。如果是,則表示倒計時結束,隱藏倒計時標籤,重新顯示獲取驗證碼按鈕,並關閉定時器,重置m_time。如果沒有小於等於0,表示倒計時沒有結束,則更新倒計時顯示標籤內容。
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後重新傳送")); }
到此這篇關於Qt實現自定義驗證碼輸入框控制元件的方法的文章就介紹到這了,更多相關Qt 驗證碼輸入框內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45