2011-01-11 15 views
5

Ich benutze PyQt4 QLineEdit Widget, um das Passwort zu akzeptieren. Es gibt eine setMasking-Eigenschaft, die jedoch nicht dem Festlegen des Maskierungszeichens folgt.Maskieren von QLineEdit-Text

Antwort

7

Es gibt keine setMasking Eigenschaft für QLineEdit in entweder PyQt4 oder Qt4. Sprechen Sie über ? Wenn du es tust, tut das nicht, was du zu tun scheinst. Es legt die Maske fest, mit der die Eingabe validiert werden soll.

Um das Steuerelement zu verbergen, was getippt wird, verwenden Sie die setEchoMode()-Methode, die das standardmäßige Kennwort-Versteckzeichen für die Plattform anzeigen soll (sollte). Wenn Sie möchten, dass ein benutzerdefiniertes Zeichen angezeigt wird, müssen Sie aus der Dokumentation eine neue Klasse ableiten. Im Allgemeinen ist dies jedoch eine schlechte Idee, da es dem widerspricht, was Nutzer erwarten.

3

Es ist ziemlich einfach mit Qt: Sie müssten einen neuen Stil definieren und ein neues Zeichen aus der styleHint-Methode zurückgeben, wenn die QStyle :: SH_LineEdit_PasswordCharacter-Konstante abgefragt wird. Unten ist ein Beispiel:

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

Jetzt ist das Problem, dass pyqt scheint nichts über QProxyStyle zu wissen; es scheint nicht eingepackt zu sein, also steckst du fest, außer du würdest es selbst wickeln wollen.

Grüße

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