2011-01-11 105 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)