Qt---实现在QLineEdit中输入密码时先显示明文,然后显示*号

转载 2015年11月20日 23:55:35



//==>QPasswordLineEdit.h

#ifndef QPASSWORDLINEEDIT_H
#define QPASSWORDLINEEDIT_H

#include <QLineEdit>

class QPasswordLineEdit : public QLineEdit
{
Q_OBJECT

public:
QPasswordLineEdit(QWidget *parent,int timeout = 300);
~QPasswordLineEdit();
private slots:
void DisplayPasswordAfterEditSlot(int,int);
void DisplayPasswordSlot();
void GetRealTextSlot(const QString&);

public:
QString GetPassword() const;
void SetTimeout(int msec);
int GetTimeout() const;

private:
QString  GetMaskString();

private:
int  m_Timeout;
QString  m_LineEditText;
int  m_LastCharCount;
};

#endif // QPASSWORDLINEEDIT_H


/// ===> QPasswordLineEdit.cpp

#include "qpasswordlineedit.h"
#include <QTimer>

QPasswordLineEdit::QPasswordLineEdit(QWidget *parent,int timeout) : QLineEdit(parent)
{
m_Timeout = timeout;
m_LineEditText = "";
m_LastCharCount = 0;

connect(this,SIGNAL(cursorPositionChanged(int,int)),this,SLOT(DisplayPasswordAfterEditSlot(int,int)));
connect(this,SIGNAL(textEdited(const QString&)),this,SLOT(GetRealTextSlot(const QString&)));
}

QPasswordLineEdit::~QPasswordLineEdit()
{

}

void QPasswordLineEdit::DisplayPasswordAfterEditSlot(int oldPos,int newPos)
{
if(oldPos>=0 && newPos>=0 )
{
if(newPos>oldPos)
QTimer::singleShot(m_Timeout,this,SLOT(DisplayPasswordSlot()));
else
this->setCursorPosition(oldPos);
}

}
void QPasswordLineEdit::DisplayPasswordSlot()
{
this->setText(GetMaskString());
}
void QPasswordLineEdit::GetRealTextSlot(const QString& text)
{
if(text.count()>m_LastCharCount)
m_LineEditText.append(text.right(1));
else if(text.count()<m_LastCharCount)
m_LineEditText.remove(m_LineEditText.count()-1,1);
m_LastCharCount = m_LineEditText.count();
}

QString QPasswordLineEdit::GetPassword() const
{
return m_LineEditText;
}
void QPasswordLineEdit::SetTimeout(int msec)
{
m_Timeout = msec;
}
int QPasswordLineEdit::GetTimeout() const
{
return m_Timeout;
}

QString QPasswordLineEdit::GetMaskString()
{
QString mask = "";
int count = this->text().length();
if(count>0)
{
for(int i=0;i<count;i++)
mask += "*";
}
return mask;
}


通过GetPassword()可以获取当前的密码明文;

Qt设置密码输入框格式QLineEdit

enum QLineEdit::EchoMode This enum type describes how a line edit should display its contents. Cons...
  • qq_33850438
  • qq_33850438
  • 2016年08月18日 22:26
  • 6666

qt QlineEdit 输入密码显示成星号

使用qt自带的函数就可以实现: lineEdit->setEchoMode(QLineEdit::Password);//输入的时候就显示圆点 或者 lineEdit->setEchoMode(...
  • life_is_too_hard
  • life_is_too_hard
  • 2016年09月29日 11:06
  • 3012

如何在QT的ui界面上为QLineEdit文本框中建立事件

1、先将你的文本框LineEdit提升为类,单击右键即可看到。例如提升的类名为PasswordLineEdit。头文件名称为passwordlineedit.h。 2、在工程中创建一个passwor...
  • caokunchao
  • caokunchao
  • 2017年01月13日 19:58
  • 978

Qt自定义密码框,先显示后隐藏

现在很多应用在密码输入时,会先显示一段时间,大概几百毫秒,然后再变成星号或者圆点隐藏起来。这样做的好处是,可以让密码输入者看到自己输入的字符,同时又防止密码被偷窥。但是Qt自带的密码输入框,要么输入时...
  • caoshangpa
  • caoshangpa
  • 2016年03月25日 11:31
  • 4842

qt 登陆界面账号和密码的验证

这几天一直研究怎么让界面账号和密码验证的问题 特别想用数据库,一直有QSQLlitdatabase cant find 的问题 找了很多方法没成功 要交课设 所以放弃用其他方法 用文件存吧 比较省事...
  • qq_26869059
  • qq_26869059
  • 2015年05月26日 21:35
  • 3011

将密码框(lineEdit)格式设置为小黑点

在对话框类的构造函数中添加初始化语句logindlg::logindlg(QWidget *parent) : QDialog(parent), ui(new Ui::logind...
  • hym2111
  • hym2111
  • 2012年09月29日 20:25
  • 827

QTextEdit实时显示运行结果

最近用Qt界面程序用来处理序列图像的目标检测,每次输入一组序列图,检测结果(每一帧图像上目标的个数,对应坐标,置信度等)除了以图像形式实时显示意外,还需要以文本形式显示在界面上。 我采用了QText...
  • hongxingabc
  • hongxingabc
  • 2016年08月16日 20:08
  • 3506

Qt实现登录密码框

Qt做登录框,用户名的登录一般用QCOmbobox来实现,密码框一般用QLineEdit,但是用户名的输入和密码的输入都有规定的字符,这就需要我们用正则表达式去筛选字符。对于密码框,还有一点就是密码不...
  • u013394556
  • u013394556
  • 2014年12月12日 10:16
  • 2815

Qt---实现在QLineEdit中输入密码时先显示明文,然后显示*号

//==>QPasswordLineEdit.h #ifndef QPASSWORDLINEEDIT_H #define QPASSWORDLINEEDIT_H #inclu...
  • jolin678
  • jolin678
  • 2015年11月20日 23:55
  • 1578

QLineEdit 输入验证(相关的设置)

LineEdit提 供一个文字输入栏位,可以输入文字或数字,我们可以对输入作验证,或是设定为一般显示、密码显示等等,以下的程式是个简单的设定示范:  #include > #includ...
  • haluoluo211
  • haluoluo211
  • 2015年07月13日 19:33
  • 1653
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt---实现在QLineEdit中输入密码时先显示明文,然后显示*号
举报原因:
原因补充:

(最多只允许输入30个字)