2011-01-11 39 views
5

Tôi đang sử dụng tiện ích PyQt4 QLineEdit để chấp nhận mật khẩu. Có một thuộc tính setMasking, nhưng không làm theo cách đặt ký tự mặt nạ.Mặt nạ QLineEdit văn bản

Trả lời

7

Không có tài sản setMasking cho QLineEdit trong cả PyQt4 hoặc Qt4. Bạn đang nói về setInputMask()? Nếu bạn đang có, điều này không làm những gì bạn dường như nghĩ rằng nó. Nó đặt mặt nạ chống lại để xác thực đầu vào.

Để có điều khiển ẩn nội dung được nhập, hãy sử dụng phương thức setEchoMode(), sẽ (hiển thị) hiển thị ký tự ẩn mật khẩu chuẩn cho nền tảng. Từ những gì tôi có thể nhìn thấy từ tài liệu, nếu bạn muốn một ký tự tùy chỉnh được hiển thị, bạn sẽ cần phải lấy được một lớp mới. Nói chung tuy nhiên, đây là một ý tưởng tồi, vì nó đi ngược lại những gì người dùng mong đợi để xem.

3

Khá dễ dàng khi sử dụng Qt: bạn cần định nghĩa kiểu mới và trả về ký tự mới từ phương thức styleHint bất cứ khi nào hằng số QStyle :: SH_LineEdit_PasswordCharacter được truy vấn. Dưới đây là ví dụ:

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

bây giờ vấn đề là pyqt dường như không biết gì về QProxyStyle; nó dường như không được bao bọc ở đó, vì vậy bạn đang bị mắc kẹt, trừ khi bạn sẽ muốn quấn nó cho mình.

liên quan

14
editor = QLineEdit() 
editor.setEchoMode(QLineEdit.Password) 
Các vấn đề liên quan