Qt自定義密碼框,先顯示后隱藏(繼承以后改寫slot即可,即與哪個相近就改寫哪個)good


        現在很多應用在密碼輸入時,會先顯示一段時間,大概幾百毫秒,然后再變成星號或者圓點隱藏起來。這樣做的好處是,可以讓密碼輸入者看到自己輸入的字符,同時又防止密碼被偷窺。但是Qt自帶的密碼輸入框,要么輸入時立即變成圓點,要么全部輸入完后再一起變成圓點。

       要實現先顯示后隱藏的效果其實很簡單,只需重載QLineEdit類,然后在連接光標位置變化信號(cursorPositionChanged)和文本編輯信號(textEdited)的槽中做相應的處理。這兩個信號對應的槽函數如下所示。

 

[cpp]  view plain  copy
 
  1. void QPasswordLineEdit::slotTextEdited(const QString& text)  
  2. {  
  3.     if(text.count()>mLastCharCount)//輸入  
  4.     {  
  5.         mLineEditText.append(text.right(1));  
  6.     }  
  7.     else if(text.count()<mLastCharCount)//刪除  
  8.     {  
  9.         mLineEditText.remove(mLineEditText.count()-1,1);  
  10.     }  
  11.     mLastCharCount = mLineEditText.count();  
  12. }  

        當文本框的字符串長度大於之前保存的字符串的長度,說明正在輸入,並將輸入的這一個字符保存到全局變量mLineEditText中;當文本框的字符串長度小於之前保存的字符串長度,說明正在刪除,並從全局變量mLineEditText中去掉最近輸入的那個字符。

 

 

[cpp]  view plain  copy
 
  1. void QPasswordLineEdit::slotCursorPositionChanged(int oldPos,int newPos)  
  2. {  
  3.     if(oldPos>=-1 && newPos>=0 )  
  4.     {  
  5.         if(newPos>oldPos)  
  6.         {  
  7.            QTimer::singleShot(mTimeout,this,SLOT(slotDisplayMaskPassword()));  
  8.         }  
  9.         else  
  10.         {  
  11.             this->setCursorPosition(oldPos);  
  12.         }  
  13.     }  
  14. }  

           當輸入字符時,光標的位置會變化,每變化一次就會在mTimeout毫秒后執行slotDisplayMaskPassword函數,該函數將文本框中的所有字符都變成星號,這樣給人的感覺就是輸入的字符是先顯示mTimeout毫秒后再變成星號的。

 

        效果如下圖所示,"打印密碼"按鈕用於調試時打印輸入的密碼。



源碼鏈接:http://download.csdn.net/detail/caoshangpa/9472305

 

http://blog.csdn.net/caoshangpa/article/details/50978164


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM