Маскировка текста QLineEdit - PullRequest
       1

Маскировка текста QLineEdit

5 голосов
/ 12 января 2011

Я использую PyQt4 QLineEdit виджет для принятия пароля. Существует свойство setMasking, но оно не соответствует способу установки маскирующего символа.

Ответы [ 4 ]

16 голосов
/ 31 октября 2012
editor = QLineEdit()
editor.setEchoMode(QLineEdit.Password)
8 голосов
/ 12 января 2011

Нет свойства setMasking для QLineEdit в PyQt4 или Qt4.Вы говорите о setInputMask()?Если это так, это не делает то, что вы, кажется, думаете.Он устанавливает маску для проверки ввода.

Чтобы элемент управления скрывал набранный текст, используйте метод setEchoMode(), который будет (должен) отображать стандартный символ сокрытия пароля для платформы.Из того, что я вижу из документации, если вы хотите, чтобы пользовательский символ отображался, вам нужно получить новый класс.Однако в целом это плохая идея, поскольку она противоречит тому, что пользователи ожидают увидеть.

3 голосов
/ 12 января 2011

С помощью Qt довольно просто: вам нужно будет определить новый стиль и вернуть новый символ из метода styleHint всякий раз, когда запрашивается константа QStyle :: SH_LineEdit_PasswordCharacter. Ниже приведен пример:

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; кажется, что он там не обернут, так что вы застряли, если только не захотите обернуть его сами.

привет

2 голосов
/ 16 мая 2012

Как говорят документы http://doc -snapshot.qt-project.org / 4.8 / stylesheet-examples.html # customizing-qlineedit :

Символ пароля строкиправки, которые имеют режим эха QLineEdit :: Password, могут быть установлены с помощью:

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