Qt编写显示密码强度的控件
本文实例为大家分享了Qt编写显示密码强度控件的具体代码,供大家参考,具体内容如下
代码:
#ifndef WIDGET_H#define WIDGET_H #include#include #include class PasswordStrengthCheck : public QWidget{Q_OBJECT public:PasswordStrengthCheck(QWidget *parent = nullptr); ~PasswordStrengthCheck(); virtual QSize minimumSizeHint() const override; void onLineEditTextChanged(const QString &text); protected:void paintEvent(QPaintEvent *event)override; private:void onTimer(); QRegularExpression lowRegularExpression; QRegularExpression mediumRegularExpression; QRegularExpression highRegularExpression; double targetRatio{0}; double nowRatio{0}; QTimer timer; }; #endif // WIDGET_H
#include "widget.h"#include#include #include PasswordStrengthCheck::PasswordStrengthCheck(QWidget *parent): QWidget(parent){lowRegularExpression = QRegularExpression("[A-Z][a-z][A-Za-z0-9_]{4,6}"); mediumRegularExpression = QRegularExpression("[A-Z][a-z][A-Za-z0-9_]{7,9}"); highRegularExpression = QRegularExpression("[A-Z][a-z][A-Za-z0-9_]{10,12}"); connect(&timer,&QTimer::timeout,this,&PasswordStrengthCheck::onTimer); timer.setInterval(40); } PasswordStrengthCheck::~PasswordStrengthCheck(){} QSize PasswordStrengthCheck::minimumSizeHint() const{return QSize(100,30); } void PasswordStrengthCheck::onLineEditTextChanged(const QString & text){if(highRegularExpression.match(text).hasMatch()){targetRatio = 1; }else if(mediumRegularExpression.match(text).hasMatch()){targetRatio = 0.66; }else if(lowRegularExpression.match(text).hasMatch()){targetRatio = 0.33; }else{targetRatio = 0; }timer.start(); } void PasswordStrengthCheck::paintEvent(QPaintEvent *event){QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing,true); const auto rect = event->rect(); auto width = rect.width(); auto height = rect.height(); painter.setBrush(Qt::white); painter.setPen(QPen(QBrush("#128bf1"),3)); int radiu = 3; QRect borderRect = QRect(width*0.05,0,width*0.9,height).adjusted(radiu,radiu,-radiu,-radiu); painter.drawRoundedRect(borderRect,radiu,radiu); QPainterPath path; path.addRoundedRect(borderRect.adjusted(radiu,radiu,-radiu,-radiu),radiu,radiu); QPainterPath path2; path2.addRect(QRect(QPoint(borderRect.x() + borderRect.width() * 0.3,borderRect.y()),borderRect.bottomRight())); QPainterPath path_left = path - path2; path2.clear(); path2.addRect(QRect(borderRect.topLeft(),QPoint(borderRect.x() + borderRect.width() * 0.7,borderRect.bottom()))); QPainterPath path_right = path - path2; QRect mediumRect = QRect(QPoint(borderRect.x() + borderRect.width() * 0.35,borderRect.top()),QPoint(borderRect.bottomRight() - QPoint(borderRect.width() * 0.35,0))).adjusted(0,radiu,0,-radiu); QPixmap greyPixmap(rect.size()); {greyPixmap.fill(Qt::transparent); QPainter painter(&greyPixmap); QBrush brush("#CDCDCD"); painter.setRenderHint(QPainter::Antialiasing,true); painter.fillPath(path_left,brush); painter.fillPath(path_right,brush); painter.fillRect(mediumRect,brush); }painter.drawPixmap(rect,greyPixmap); if(nowRatio > 0){QPixmap colorPixmap(QSize(width * nowRatio,height)); {colorPixmap.fill(Qt::transparent); QPainter painter(&colorPixmap); painter.setRenderHint(QPainter::Antialiasing,true); painter.fillPath(path_left,QBrush("#EC3700")); painter.fillPath(path_right,QBrush("#F78115")); painter.fillRect(mediumRect,QBrush("#6AA000")); }painter.drawPixmap(QPoint(0,0),colorPixmap); }} void PasswordStrengthCheck::onTimer(){static double e=0.0002; if(fabs(targetRatio - nowRatio) < e){timer.stop(); return; } if(nowRatio < targetRatio){nowRatio += 0.02; }else{nowRatio -= 0.02; }update(); }
使用:
#include "widget.h"#include#include #include int main(int argc, char *argv[]){QApplication a(argc, argv); QWidget w; QLineEdit * lineEdit = new QLineEdit; PasswordStrengthCheck * c = new PasswordStrengthCheck; QObject::connect(lineEdit,&QLineEdit::textChanged,c,&PasswordStrengthCheck::onLineEditTextChanged); QFormLayout * layout = new QFormLayout(&w); layout->addRow("密码:",lineEdit); layout->addRow("",c); w.show(); return a.exec(); }
效果:
文章图片
【Qt编写显示密码强度的控件】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- 黑洞6174怎样通过|黑洞6174怎样通过 matlab编写程序来实现?,有趣的数学 - 6174数学黑洞 - C/C++代码实现...
- 编写WAF指纹探测与Sqlmap相结合
- 双击计算机只在任务栏显示小图,桌面不显示窗口
- 代码审计VauditDemo程序到exp编写_巡安似海
- “隐形空中接口”空中显示和输入设备
- 公司官网建站笔记(腾讯云服务器装CentOS8.2系统重置密码远程ssh登陆sftp传递文件以及新建开发者账户)
- Win10系统更新后allegro白屏显示异常如何处理
- 雨林木风XP系统运用大显示器时怎样调整系统字体大小 - 雨林木风Win10系统下载官网
- 雨林木风XP系统设置局域网共享密码的办法 - 雨林木风Win10系统下载官网
- Oracle密码复杂度PASSWORD_VERIFY_FUNCTION