zoukankan      html  css  js  c++  java
  • Qt自定义密码框,先显示后隐藏(继承以后改写slot即可,即与哪个相近就改写哪个)good

            现在很多应用在密码输入时,会先显示一段时间,大概几百毫秒,然后再变成星号或者圆点隐藏起来。这样做的好处是,可以让密码输入者看到自己输入的字符,同时又防止密码被偷窥。但是Qt自带的密码输入框,要么输入时立即变成圆点,要么全部输入完后再一起变成圆点。

           要实现先显示后隐藏的效果其实很简单,只需重载QLineEdit类,然后在连接光标位置变化信号(cursorPositionChanged)和文本编辑信号(textEdited)的槽中做相应的处理。这两个信号对应的槽函数如下所示。

    [cpp] view plain copy
     
    1. void QPasswordLineEdit::slotTextEdited(const QString& text)  
    2. {  
    3.     if(text.count()>mLastCharCount)//输入  
    4.     {  
    5.         mLineEditText.append(text.right(1));  
    6.     }  
    7.     else if(text.count()<mLastCharCount)//删除  
    8.     {  
    9.         mLineEditText.remove(mLineEditText.count()-1,1);  
    10.     }  
    11.     mLastCharCount = mLineEditText.count();  
    12. }  

            当文本框的字符串长度大于之前保存的字符串的长度,说明正在输入,并将输入的这一个字符保存到全局变量mLineEditText中;当文本框的字符串长度小于之前保存的字符串长度,说明正在删除,并从全局变量mLineEditText中去掉最近输入的那个字符。

    [cpp] view plain copy
     
    1. void QPasswordLineEdit::slotCursorPositionChanged(int oldPos,int newPos)  
    2. {  
    3.     if(oldPos>=-1 && newPos>=0 )  
    4.     {  
    5.         if(newPos>oldPos)  
    6.         {  
    7.            QTimer::singleShot(mTimeout,this,SLOT(slotDisplayMaskPassword()));  
    8.         }  
    9.         else  
    10.         {  
    11.             this->setCursorPosition(oldPos);  
    12.         }  
    13.     }  
    14. }  

               当输入字符时,光标的位置会变化,每变化一次就会在mTimeout毫秒后执行slotDisplayMaskPassword函数,该函数将文本框中的所有字符都变成星号,这样给人的感觉就是输入的字符是先显示mTimeout毫秒后再变成星号的。

            效果如下图所示,"打印密码"按钮用于调试时打印输入的密码。



    源码链接:http://download.csdn.net/detail/caoshangpa/9472305

    http://blog.csdn.net/caoshangpa/article/details/50978164

  • 相关阅读:
    C#利用反射动态调用类及方法
    系统程序监控软件
    SQL server 2008 安装和远程访问的问题
    sql server 创建临时表
    IIS 时间问题
    windows 2008 安装 sql server 2008
    sql server xml nodes 的使用
    Window 7sp1 安装vs2010 sp1 打开xaml文件崩溃
    CSS资源网址
    Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0
  • 原文地址:https://www.cnblogs.com/findumars/p/8196560.html
Copyright © 2011-2022 走看看