Qt自定义密码框,先显示后隐藏
2016-03-25 11:31
399 查看
现在很多应用在密码输入时,会先显示一段时间,大概几百毫秒,然后再变成星号或者圆点隐藏起来。这样做的好处是,可以让密码输入者看到自己输入的字符,同时又防止密码被偷窥。但是Qt自带的密码输入框,要么输入时立即变成圆点,要么全部输入完后再一起变成圆点。
要实现先显示后隐藏的效果其实很简单,只需重载QLineEdit类,然后在连接光标位置变化信号(cursorPositionChanged)和文本编辑信号(textEdited)的槽中做相应的处理。这两个信号对应的槽函数如下所示。
效果如下图所示,"打印密码"按钮用于调试时打印输入的密码。
源码链接:http://download.csdn.net/detail/caoshangpa/9472305
要实现先显示后隐藏的效果其实很简单,只需重载QLineEdit类,然后在连接光标位置变化信号(cursorPositionChanged)和文本编辑信号(textEdited)的槽中做相应的处理。这两个信号对应的槽函数如下所示。
void QPasswordLineEdit::slotTextEdited(const QString& text) { if(text.count()>mLastCharCount)//输入 { mLineEditText.append(text.right(1)); } else if(text.count()<mLastCharCount)//删除 { mLineEditText.remove(mLineEditText.count()-1,1); } mLastCharCount = mLineEditText.count(); }当文本框的字符串长度大于之前保存的字符串的长度,说明正在输入,并将输入的这一个字符保存到全局变量mLineEditText中;当文本框的字符串长度小于之前保存的字符串长度,说明正在删除,并从全局变量mLineEditText中去掉最近输入的那个字符。
void QPasswordLineEdit::slotCursorPositionChanged(int oldPos,int newPos) { if(oldPos>=-1 && newPos>=0 ) { if(newPos>oldPos) { QTimer::singleShot(mTimeout,this,SLOT(slotDisplayMaskPassword())); } else { this->setCursorPosition(oldPos); } } }当输入字符时,光标的位置会变化,每变化一次就会在mTimeout毫秒后执行slotDisplayMaskPassword函数,该函数将文本框中的所有字符都变成星号,这样给人的感觉就是输入的字符是先显示mTimeout毫秒后再变成星号的。
效果如下图所示,"打印密码"按钮用于调试时打印输入的密码。
源码链接:http://download.csdn.net/detail/caoshangpa/9472305
相关文章推荐
- Qt环境搭建(Qt Creator)+Visual Studio
- 关于Qt程序打包后在其他电脑打印功能不可用问题
- Qt4程序移植到Qt5的问题
- QMediaPlayer视频播放器
- QT配置openni,opencv,g2o和pcl库
- 关于Qt中常用的延时方法--自我总结
- Qtablewiget 清空表格内容;
- Qt 的内部进程通信机制
- qt 获取windows 的消息(通过MFC的DLL的透明窗体转发消息)good
- XP下vs2008-qt4.8.6编译Qgis:QwtPolar编译
- XP下vs2008-qt4.8.6编译Qgis:qwt编译
- Qt SVG Viewer Example 看看看~
- Qt Drag and Drop Puzzle Example 看看看~
- Qt Graphics View Framework 图形视图框架
- Qt,从控件的一个综合性例子开始
- QT 鼠标事件 键盘事件 的属性
- 第一个Qt程序 Helloworld
- Qt之模型/视图(自定义按钮)
- Qt之模型/视图(自定义按钮)
- 解决QT使用mysql编译时不能连接数据库的问题