Używam widżetu PyQt4 QLineEdit do akceptowania hasła. Istnieje właściwość setMasking, ale nie po ustawieniu znaku maskującego.Maskowanie tekstu QLineEdit
Odpowiedz
Brak właściwości setMasking
dla QLineEdit
w PyQt4 lub Qt4. Czy mówisz o setInputMask()
? Jeśli tak, to nie robi tego, co wydaje się, że to robi. Ustawia maskę, która służy do sprawdzania poprawności danych wejściowych.
Aby uzyskać kontrolę ukrywania wpisanego tekstu, należy użyć metody setEchoMode()
, która będzie (powinna) wyświetlać standardowy znak ukrywania haseł platformy. Z tego, co widzę w dokumentacji, jeśli chcesz, aby wyświetlany był niestandardowy znak, musisz wyprowadzić nową klasę. Generalnie jednak jest to zły pomysł, ponieważ jest sprzeczny z oczekiwaniami użytkowników.
To całkiem proste przy użyciu Qt: musisz zdefiniować nowy styl i zwrócić nowy znak z metody styleHint, gdy kwerenda jest stała QStyle :: SH_LineEdit_PasswordCharacter. Poniżej znajduje się przykład:
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()));
Problem polega na tym, że pyqt nie ma pojęcia o QProxyStyle; wydaje się, że nie jest tam owinięty, więc utknąłeś, chyba że sam chciałbyś go owinąć.
pozdrowienia
Jak docs powiedzieć http://doc-snapshot.qt-project.org/4.8/stylesheet-examples.html#customizing-qlineedit:
Charakter hasło edycji liniowych, które mają QLineEdit :: tryb echo Hasło można ustawić za pomocą:
QLineEdit[echoMode="2"] {
lineedit-password-character: 9679;
}
editor = QLineEdit()
editor.setEchoMode(QLineEdit.Password)