《QT实用小工具·五十五》带有标签、下划线的Material Design风格输入框
1、概述
源码放在文章末尾
该项目实现了一个带有标签动画、焦点动画、正确提示、错误警告的单行输入框控件。下面是demo演示:
项目部分代码如下所示:
#ifndef LABELEDEDIT_H
#define LABELEDEDIT_H#include <QObject>
#include <QWidget>
#include <QVBoxLayout>
#include <QPropertyAnimation>
#include <QPainter>
#include <QPainterPath>
#include <QTimer>
#include <cmath>
#include <QDebug>
#include "bottomlineedit.h"class LabeledEdit : public QWidget
{Q_OBJECTQ_PROPERTY(double LabelProg READ getFocusProg WRITE setLabelProg)Q_PROPERTY(int FocusProg READ getFocusProg WRITE setFocusProg)Q_PROPERTY(int LosesProg READ getLosesProg WRITE setLosesProg)Q_PROPERTY(int WrongProg READ getWrongProg WRITE setWrongProg)Q_PROPERTY(int CorrectProg READ getCorrectProg WRITE setCorrectProg)Q_PROPERTY(int ShowLoadingProg READ getShowLoadingProg WRITE setShowLoadingProg)Q_PROPERTY(int HideLoadingProg READ getHideLoadingProg WRITE setHideLoadingProg)Q_PROPERTY(int TipProg READ getTipProg WRITE setTipProg)Q_PROPERTY(int MsgShowProg READ getMsgShowProg WRITE setMsgShowProg)Q_PROPERTY(int MsgHideProg READ getMsgHideProg WRITE setMsgHideProg)
public:LabeledEdit(QWidget *parent = nullptr);LabeledEdit(QString label, QWidget* parent = nullptr);LabeledEdit(QString label, QString def, QWidget* parent = nullptr);BottomLineEdit* editor();void adjustBlank();QString text();void setText(QString text);void setLabelText(QString text);void setMsgText(QString text, bool autoClear = false);void setMsgText(QString text, QColor color);void setTipText(QString text);void setTipText(QString text, QColor color);void setAccentColor(QColor color);void showCorrect();void hideCorrect();void showWrong();void showWrong(QString msg, bool autoClear = false);void showLoading();void hideLoading();private:void upperLabel();void innerLabel();void showTip();void hideTip();void showMsg();void hideMsg();protected:void resizeEvent(QResizeEvent *event) override;void paintEvent(QPaintEvent *) override;void enterEvent(QEvent *event) override;void leaveEvent(QEvent *event) override;signals:public slots:private:QPropertyAnimation *startAnimation(QByteArray name, double start, double end, int duration, QEasingCurve curve = QEasingCurve::Linear);void setLabelProg(double x);double getLabelProg();void setFocusProg(int x);int getFocusProg();void setLosesProg(int x);int getLosesProg();void setWrongProg(int x);int getWrongProg();void setCorrectProg(int x);int getCorrectProg();void setShowLoadingProg(int x);int getShowLoadingProg();void setHideLoadingProg(int x);int getHideLoadingProg();void setTipProg(int x);int getTipProg();void setMsgShowProg(int x);int getMsgShowProg();void setMsgHideProg(int x);int getMsgHideProg();private:BottomLineEdit* line_edit;QWidget* up_spacer;QWidget* down_spacer;QColor grayed_color; // 没有聚焦的颜色:下划线+文字QColor accent_color; // 终点颜色QString label_text; // 标签QList<QPointF> label_in_poss; // 标签在输入框里面的左下角位置QList<QPointF> label_up_poss; // 标签在输入框上方的左下角位置const int label_ani_max = 4; // 不超过这数字就使用普通的动画QString tip_text; // 鼠标悬浮显示在下面的(有msg_text时隐藏)QColor tip_color;bool entering = false; // showWrong隐藏tip,用来做flagQString msg_text; // 警告信息QColor msg_color; // 警告颜色QString msg_hiding; // 隐藏中的msg,用于两次msg的切换bool autoClearMsg = false; // 自动删除错误消息QTimer* loading_timer = nullptr;int loading_petal = 8; // 菊花花瓣数量QRect loading_rect; // 加载菊花的位置double loading_inner = 0; // 菊花内环半径double loading_outer = 0; // 菊花外环半径int loading_index = 0; // 加载到了哪个花瓣(最右边为0)double label_prog = 0; // 标签上下移动int focus_prog = 0; // 下划线从左往右int loses_prog = 0; // 下划线从右边消失int wrong_prog = 0; // 底部下划线浪动int correct_prog = 0; // 右边的勾int show_loading_prog = 0; // 显示加载int hide_loading_prog = 0; // 隐藏加载int tip_prog = 0;int msg_show_prog = 0;int msg_hide_prog = 0;const int pen_width = 2;const double label_scale = 1.5;const int label_duration = 400;const int focus_duration = 500;const int wrong_duration = 900;const int correct_duration = 600;const int show_loading_duration = 600;const int hide_loading_duration = 200;const int tip_duration = 400;const int msg_show_duration = 600;const int msg_hide_duration = 300;
};#endif // LABELEDEDIT_H
源码下载
相关文章:

《QT实用小工具·五十五》带有标签、下划线的Material Design风格输入框
1、概述 源码放在文章末尾 该项目实现了一个带有标签动画、焦点动画、正确提示、错误警告的单行输入框控件。下面是demo演示: 项目部分代码如下所示: #ifndef LABELEDEDIT_H #define LABELEDEDIT_H#include <QObject> #include <QWidget>…...

用Go实现一个无界资源池
写在文章开头 我们希望通过go语言实现一个简单的资源池,而这个资源池的资源包括但不限于: 数据库连接池线程池协程池网络连接池 只要这些资源实现我们指定的关闭方法,则都可以通过我们封装的资源池进行统一管理,需要简单说明一下这个资源池…...

Apache Seata基于改良版雪花算法的分布式UUID生成器分析2
title: 关于新版雪花算法的答疑 author: selfishlover keywords: [Seata, snowflake, UUID, page split] date: 2021/06/21 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 关于新版雪花算法的答疑 在上一篇关于新版雪花算法的解析中…...

13、揭秘JVM垃圾回收器:面试必备知识,你掌握了吗?
13.1、前文回顾 在上一篇文章中,我们详细分析了触发Minor GC的时机,以及对象何时会从新生代迁移到老年代。我们还讨论了为了确保新生代向老年代的内存迁移安全,需要在Minor GC之前如何检查老年代的内存空间,以及在什么情况下会触发老年代的Full GC,以及老年代的垃圾回收算…...

治疗耳鸣患者案例分享第二期
“患者耳鸣20年了,目前耳朵没有堵或者胀的感觉,但是偶尔有点痒,平时会有头晕头胀这种情况,然后头晕是稍微晕炫一下。然后头疼是经常有的,头胀不经常。” 患者耳鸣持续20年,虽然耳朵没有堵或胀的感觉&#x…...
数据加密的方法
这些方法可以单独或结合使用,以提高数据的安全性和保护隐私。 对称加密:使用相同的密钥对数据进行加密和解密。常见的对称加密算法包括DES、AES和RC4。 非对称加密:使用一对密钥(公钥和私钥)对数据进行加密和解密。发…...

Android BINDER是干嘛的?
1.系统架构 2.binder 源码位置: 与LINUX传统IPC对比...
运维各种中间件的手动安装(非常详细)
压缩文件夹 tar -zcvf newFolder.tar.gz oldFolder 把oldFolder文件夹压缩成newFolder.tar.gz解压文件夹 tar -zxvf 压缩文件名.tar.gzlinux安装jdk (参考 https://blog.csdn.net/qq_42269466/article/details/124079963 ) 1、创建目录存放jdk包 mkd…...

【Android】Android应用性能优化总结
AndroidApp应用性能优化总结 最近大半年的时间里,大部分投在了某国内新能源汽车的某款AndroidApp开发上。 由于该App是该款车上,常用重点应用。所以车厂对应用性能的要求比较高。 主要包括: 应用冷启动达到***ms。应用热(温)启动达到***ms应…...

FBA头程海运发货流程是怎样的?
FBA头程发货作为整个FBA流程的关键一环,更是直接影响到商品从起点到终点的流通效率和成本。其中,海运作为一种经济、稳定的运输方式,在FBA头程发货中扮演着举足轻重的角色。那么,FBA头程海运发货流程究竟是怎样的呢? 1、装箱与发…...

二、VLAN原理和配置
vlan不是协议,是一个技术,虚拟局域网技术,基于802.1q协议。 vlan(虚拟局域网),将一个物理的局域网在逻辑上划分成多个广播域的技术。 目录 1.冲突域和广播域 概念 范围 2.以太网帧格式 3.以太网帧封装…...

stackqueue类——适配器模式 双端队列deque(C++)
接下来我们将实现 stack、queue 类的常用函数,其实对于 stack 和 queue 的常用函数实现可以说得上是非常简单,若想详细了解可以看这篇:栈和队列&循环队列(C/C)_栈和循环队列-CSDN博客;在本篇中我们将使…...

SpringCloud知识点梳理
1. Spring Cloud 综述 1.1 Spring Cloud 是什么 [百度百科]Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot的开发⻛格…...

【NOI】C++程序结构入门之分支结构二
文章目录 前言一、逻辑运算符1.导入2.逻辑与(&&)3.逻辑或(||)4.逻辑非(!) 二、例题讲解问题:1656. 是两位的偶数吗问题:1658. 游乐设施问题:1659. 是否含有数字5…...

web自动化系列-使用普通模式编写测试用例以及存在问题(十六)
前面已经把selenium的主要操作介绍完毕 ,接下来我们通过编写几条测试用例感受下selenium的用法 。 1.用例需求 还是以登录为例 ,需要实现的测试用例为 : case1:输入正确的用户名和密码进行登录case2 : 输入正确的用户名和错误的…...
VSCode 配置 Qt 开发环境
文章目录 1. 环境说明2. 配置系统环境变量 1. 环境说明 操作系统:Windows 11VSCode版本:1.88.1CMake版本:3.27.7Qt6版本:6.7.0(MinGW 11.2.0 64-bit) 2. 配置系统环境变量 自行根据自己的Qt安装路径配置 配置 MinGW 和 CMake C…...
【Jenkins】持续集成与交付 (七):Gitlab添加组、创建用户、创建项目和源码上传到Gitlab仓库
🟣【Jenkins】持续集成与交付 (七):Gitlab添加组、创建用户、创建项目和源码上传到Gitlab仓库 1、创建组2、创建用户3、将用户添加到组中4、在用户组中创建项目5、源码上传到Gitlab仓库5.1 初始化版本控制5.2 将文件添加到暂存区5.3 提交代码到本地仓库5.4 推送代码到 Git…...

L1-017 到底有多二
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是偶数&…...

常用语音识别开源四大工具:Kaldi,PaddleSpeech,WeNet,EspNet
无论是基于成本效益还是社区支持,我都坚决认为开源才是推动一切应用的动力源泉。下面推荐语音识别开源工具:Kaldi,Paddle,WeNet,EspNet。 1、最成熟的Kaldi 一个广受欢迎的开源语音识别工具,由Daniel Pove…...

python笔记 | 哥德巴赫猜想
哥德巴赫猜想:每个不小于6的偶数都可以表示成两个素数之和。 素数:只能被1和自身整除的正整数。就是大于1且除了1和它本身之外没有其他因数的数。例如,2、3、5、7、11等都是素数,而4、6、8、9等则不是素数。 下面这段Python代码…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...