2011-01-11 99 views
5

我正在使用PyQt4 QLineEdit小部件來接受密碼。有一個setMasking屬性,但不遵循如何設置掩碼字符。Masking QLineEdit文本

回答

7

對於QLineEdit,在PyQt4或Qt4中沒有setMasking屬性。你在說什麼setInputMask()?如果你是,這不會做你認爲它確實如此。它設置驗證輸入的掩碼。

要讓控件隱藏輸入內容,請使用setEchoMode()方法,該方法將(應該)顯示平臺的標準密碼隱藏字符。從我可以從文檔中看到,如果你想要顯示一個自定義字符,你將需要派生一個新的類。但總的來說,這是一個壞主意,因爲它違背了用戶期望看到的。

3

使用Qt非常簡單:只要查詢QStyle :: SH_LineEdit_PasswordCharacter常量,就需要定義一個新樣式並從styleHint方法返回新字符。下面是一個例子:

class LineEditStyle : public QProxyStyle 
{ 
public: 
    LineEditStyle(QStyle *style = 0) : QProxyStyle(style) { } 

    int styleHint(StyleHint hint, const QStyleOption * option = 0, 
        const QWidget * widget = 0, QStyleHintReturn * returnData = 0) const 
    { 
     if (hint==QStyle::SH_LineEdit_PasswordCharacter) 
      return '%'; 
     return QProxyStyle::styleHint(hint, option, widget, returnData); 
    } 
}; 

lineEdit->setEchoMode(QLineEdit::Password); 
lineEdit->setStyle(new LineEditStyle(ui->lineEdit->style())); 

現在的問題是pyqt似乎沒有任何關於QProxyStyle的知識;它似乎沒有包裹在那裏,所以你被卡住了,除非你想自己包裝它。

問候

14
editor = QLineEdit() 
editor.setEchoMode(QLineEdit.Password)