返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Qt编写显示密码强度的控件
  • 553
分享到

Qt编写显示密码强度的控件

2024-04-02 19:04:59 553人浏览 泡泡鱼
摘要

本文实例为大家分享了Qt编写显示密码强度控件的具体代码,供大家参考,具体内容如下 代码: #ifndef WIDGET_H #define WIDGET_H   #include &

本文实例为大家分享了Qt编写显示密码强度控件的具体代码,供大家参考,具体内容如下

代码:

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QRegularExpression>
#include <QTimer>
 
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 <QPainter>
#include <QPaintEvent>
#include <QPainterPath>
 
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 <QApplication>
#include <QLineEdit>
#include <QFORMLayout>
 
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();
}

效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Qt编写显示密码强度的控件

本文链接: https://lsjlt.com/news/151433.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Qt编写显示密码强度的控件
    本文实例为大家分享了Qt编写显示密码强度控件的具体代码,供大家参考,具体内容如下 代码: #ifndef WIDGET_H #define WIDGET_H   #include &...
    99+
    2024-04-02
  • Qt编写提示进度条的实现示例
    目录一、前言二、实现的功能三、效果图四、头文件代码五、核心代码六、控件介绍一、前言 我们在很多的安装包中,在安装过程中,经常可以在底部看到一个漂亮的进度条,上面悬浮着显示对应的进度...
    99+
    2024-04-02
  • 使用React组件编写温度显示器
    本文实例为大家分享了React组件编写温度显示器的具体代码,供大家参考,具体内容如下 这是模拟了一下温度显示器的效果,先看效果: 先在页面中引入React等; import Rea...
    99+
    2024-04-02
  • 如何进行Qt编写提示进度条的实现
    今天就跟大家聊聊有关如何进行Qt编写提示进度条的实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、前言我们在很多的安装包中,在安装过程中,经常可以在底部看到一个漂亮的进度条,上面...
    99+
    2023-06-22
  • 如何编写显示农历的VBS代码
    这篇文章主要介绍“如何编写显示农历的VBS代码”,在日常操作中,相信很多人在如何编写显示农历的VBS代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何编写显示农历的VBS代码”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-08
  • React实现基于Antd密码强度校验组件示例详解
    目录引言效果预览组件思想组件开发引言 最近在开发 Nest 和 Umi 技术栈的个人项目,在用户管理模块需要用到一个密码强度校验组件,在网上寻找一方资料,没有找到自己想要的,特此自...
    99+
    2023-01-17
    React Antd密码强度校验 React Antd
  • QT编写地图实现设备点位的示例代码怎么写
    本篇文章为大家展示了QT编写地图实现设备点位的示例代码怎么写,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、前言在学习JS语法的时候发现其实程序都大同小异,正所谓一通百通,熟悉各大概的语法以后基本...
    99+
    2023-06-26
  • Qt编写地图实现闪烁点图的示例代码
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 Qt作为一个超大型的一站式GUI超市开发集成环境,不仅集成了大量的可视化UI组件,还提供了网络库、数据库操作、文件...
    99+
    2024-04-02
  • QT编写地图实现设备点位的示例代码
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 在学习JS语法的时候发现其实程序都大同小异,正所谓一通百通,熟悉各大概的语法以后基本都可以上手,和C++最大的不同...
    99+
    2024-04-02
  • 编写 ASP Web Forms 控件:创建自己的强大工具
    ASP.NET Web Forms 控件是强大的工具,可帮助您创建动态和交互式的 Web 应用程序。通过创建自己的控件,您可以扩展 ASP.NET 框架并为您的应用程序添加自定义功能。 第一步:创建控件库项目 在 Visual Stud...
    99+
    2024-04-02
  • Android自定义控件制作显示进度的Button
    最近看到一些应用在下载文件的时候,并没有额外弹出进度条,而是很炫的使用启动下载任务的Button直接显示文件的下载进度,通过改变其背景色,从左向右推进,直到填满整个Button...
    99+
    2022-06-06
    button Android
  • Android实现显示电量的控件代码
    下面介绍了Android实现显示电量的控件代码,具体代码如下: 1、目录结构,本人是使用安卓死丢丢。 2、运行界面,输入框中输入数值,点击刷新,会再电池中显示出相应的电量...
    99+
    2022-06-06
    Android
  • QT编写地图实现在线轮廓图的示例代码
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码 一、前言 轮廓图也叫行政区划,这里的轮廓图是指百度地图的区域轮廓图,不是之前文章中提到的echart专用的轮廓图,百度地图...
    99+
    2024-04-02
  • QT编写地图实现离线轮廓图的示例代码
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码 一、前言 离线轮廓图使用起来,就没有在线轮廓图方便了,在线的可以直接传入名称拿到,离线的只能自己绘制了,一般需要用区域轮廓...
    99+
    2024-04-02
  • Qt编写地图实现省市区域图的示例代码
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 省市区域图也可以叫省市轮廓图,就是将每个省份、市区的边界区域变成轮廓展示,只是个大概的轮廓,和真是的地图基本一致...
    99+
    2024-04-02
  • Qt实现拖动单个控件移动的示例代码
    目录1.设置窗口拖拽属性2.创建初始控件3.选中控件进行拖动3.1响应mousePressEvent事件3.2判断控件拖动3.3事件处理3.4结束拖动做惯了静态图,今天来搞一搞动态图...
    99+
    2024-04-02
  • Qt编写地图实现动态点位标注的示例代码
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 动态点位标注是定制的一个功能模块,提供直接地图上选点设置标记点,点位信息用结构体存储,其中包括了经度、纬度、速度、...
    99+
    2024-04-02
  • Css控制鼠标hover图片突出显示的代码怎么写
    这篇文章主要介绍“Css控制鼠标hover图片突出显示的代码怎么写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Css控制鼠标hover图片突出显示的代码怎么写”文...
    99+
    2024-04-02
  • java读写ini配置文件的示例代码怎么编写
    本篇文章为大家展示了java读写ini配置文件的示例代码怎么编写,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面通过代码先看下java 读写 ini 配置文件,代码如下所示:package&nbs...
    99+
    2023-06-26
  • HTML5实现上传文件显示进度的代码分享
    这篇文章主要介绍“HTML5实现上传文件显示进度的代码分享”,在日常操作中,相信很多人在HTML5实现上传文件显示进度的代码分享问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作