开发者

Masking QLineEdit text

I am using PyQt4 QLineEdit widget to 开发者_StackOverflow中文版accept password. There is a setMasking property, but not following how to set the masking character.


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


There is no setMasking property for QLineEdit in either PyQt4 or Qt4. Are you talking about setInputMask()? If you are, this does not do what you seem to think it does. It sets the mask against which to validate the input.

To get the control to hide what is typed, use the setEchoMode() method, which will (should) display the standard password hiding character for the platform. From what I can see from the documentation, if you want a custom character to be displayed, you will need to derive a new class. In general however, this is a bad idea, since it goes against what users expect to see.


It's quite easy using Qt: you would need to define a new style and return new character from the styleHint method whenever QStyle::SH_LineEdit_PasswordCharacter constant is queried. Below is an example:

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()));

now the problem is that pyqt doesn't seem to know anything about QProxyStyle; it seem to be not wrapped there, so you're stuck, unless you would want to wrap it yourself.

regards


As docs say http://doc-snapshot.qt-project.org/4.8/stylesheet-examples.html#customizing-qlineedit:

The password character of line edits that have QLineEdit::Password echo mode can be set using:

QLineEdit[echoMode="2"] {
    lineedit-password-character: 9679;
}


In Qt Designer

Select the line edit, and in the Property Editor window, there will be a property echoMode which you can set to Password.

Using python code

In this case, Anti Earth's answer will work which is:

myLineEdit.setEchoMode(QLineEdit.Password)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜