1. 程式人生 > >Qt自定義密碼框,先顯示後隱藏

Qt自定義密碼框,先顯示後隱藏

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

       要實現先顯示後隱藏的效果其實很簡單,只需過載QLineEdit類,然後在連線游標位置變化訊號(cursorPositionChanged)和文字編輯訊號(textEdited)的槽中做相應的處理。這兩個訊號對應的槽函式如下所示。

void QPasswordLineEdit::slotTextEdited(const QString& text)
{
    if(text.count()>mLastCharCount)//輸入
    {
        mLineEditText.append(text.right(1));
    }
    else if(text.count()<mLastCharCount)//刪除
    {
        mLineEditText.remove(mLineEditText.count()-1,1);
    }
    mLastCharCount = mLineEditText.count();
}
        當文字框的字串長度大於之前儲存的字串的長度,說明正在輸入,並將輸入的這一個字元儲存到全域性變數mLineEditText中;當文字框的字串長度小於之前儲存的字串長度,說明正在刪除,並從全域性變數mLineEditText中去掉最近輸入的那個字元。
void QPasswordLineEdit::slotCursorPositionChanged(int oldPos,int newPos)
{
    if(oldPos>=-1 && newPos>=0 )
    {
        if(newPos>oldPos)
        {
           QTimer::singleShot(mTimeout,this,SLOT(slotDisplayMaskPassword()));
        }
        else
        {
            this->setCursorPosition(oldPos);
        }
    }
}
           當輸入字元時,游標的位置會變化,每變化一次就會在mTimeout毫秒後執行slotDisplayMaskPassword函式,該函式將文字框中的所有字元都變成星號,這樣給人的感覺就是輸入的字元是先顯示mTimeout毫秒後再變成星號的。

        效果如下圖所示,"列印密碼"按鈕用於除錯時列印輸入的密碼。



原始碼連結:http://download.csdn.net/detail/caoshangpa/9472305