【QT-lineEidte动画效果

QT-lineEidte动画效果

  • 一、演示效果
  • 二、核心代码
  • 三、下载链接

一、演示效果

在这里插入图片描述

二、核心代码

#ifndef DynamicUnderlineLineEdit_H
#define DynamicUnderlineLineEdit_H#include <QWidget>
#include <QLineEdit>
#include <QPainter>
#include <QPaintEvent>
#include <QFocusEvent>
#include <QTimer>
#include <QColor>
#include <QPointF>
#include <QPalette>//动态下划线单行文本框:Dynamic Underline LineEdit
class DynamicUnderlineLineEdit : public QLineEdit
{Q_OBJECT
public:explicit DynamicUnderlineLineEdit(QWidget *parent = nullptr);explicit DynamicUnderlineLineEdit(const QString &text, QWidget *parent = nullptr);void setLinePen( const QPen &focusInPen,const QPen &focusOutPen = QPen(QBrush(QColor(66,66,66)),2)); // 设置线条的绘制画笔,参数:获取焦点的绘制画笔,失去焦点的绘制画笔void setTextColor(const QColor &textColor);                                 // 设置输入文字颜色void setPlaceholderTextColor(const QColor &placeholderText);                // 设置预设背景文字颜色void setLineSpeed(int speed);                                               // 设置线条填速度,越小越快,最小为1,实际使用可根据文本框的长度不同设置不同的速度以达到最佳观感private:int right_coordinate{-1};   // 线条右侧坐标QTimer *timer;QPen inactive_pen;// 未获得焦点时线条的绘制画笔QPen active_pen; // 获得焦点时线条的绘制画笔void initializeMemberVariable();private slots:void inFocus();  // 获得焦点void outFocus(); // 失去焦点protected:virtual void paintEvent(QPaintEvent *event) override;virtual void focusInEvent(QFocusEvent *event) override;  // 获取焦点事件virtual void focusOutEvent(QFocusEvent *event) override; // 失去焦点事件
};#endif // DynamicUnderlineLineEdit_H
#include "DynamicUnderlineLineEdit.h"DynamicUnderlineLineEdit::DynamicUnderlineLineEdit(QWidget *parent): QLineEdit{parent},timer{new QTimer(this)}
{initializeMemberVariable();
}
DynamicUnderlineLineEdit::DynamicUnderlineLineEdit(const QString &text, QWidget *parent): QLineEdit::QLineEdit(text,parent)
{initializeMemberVariable();
}void DynamicUnderlineLineEdit::setLinePen( const QPen &focusInPen,const QPen &focusOutPen)
{inactive_pen = focusOutPen;active_pen = focusInPen;
}void DynamicUnderlineLineEdit::setTextColor(const QColor &textColor)
{const_cast<QPalette &>(palette()).setColor(QPalette::ColorRole::Text, textColor);
}void DynamicUnderlineLineEdit::setPlaceholderTextColor(const QColor &placeholderText)
{const_cast<QPalette &>(palette()).setColor(QPalette::ColorRole::PlaceholderText, placeholderText);
}void DynamicUnderlineLineEdit::setLineSpeed(int speed)
{timer->setInterval(speed);
}void DynamicUnderlineLineEdit::initializeMemberVariable()
{setFocusPolicy(Qt::ClickFocus);timer->setInterval(12);connect(timer, &QTimer::timeout, this, &DynamicUnderlineLineEdit::inFocus);setAttribute(Qt::WA_TranslucentBackground);//背景透明setFrame(false);//无边框setTextMargins(10, 0, 0, 0);//设置文本左边距10像素inactive_pen.setColor(qRgb(66, 66, 66));inactive_pen.setWidth(2);active_pen.setColor(qRgb(0, 123, 255));active_pen.setWidth(2);
}void DynamicUnderlineLineEdit::inFocus()
{right_coordinate += 10;if (right_coordinate > width())timer->stop();update();
}void DynamicUnderlineLineEdit::outFocus()
{right_coordinate -= 10;if (right_coordinate < 0)timer->stop();update();
}void DynamicUnderlineLineEdit::paintEvent(QPaintEvent *event)
{QLineEdit::paintEvent(event);QPainter painter = QPainter(this);painter.setRenderHint(QPainter::RenderHint::Antialiasing); // 抗锯齿painter.setPen(inactive_pen); // 设置画笔颜色和线条样式painter.drawLine(0, height() - inactive_pen.width(),width(), height() - inactive_pen.width()); // 在底部画未选中时的线条painter.setPen(active_pen);painter.drawLine(-2, height() - active_pen.width(),right_coordinate, height() - active_pen.width()); // 在底部画选中时的线条
}void DynamicUnderlineLineEdit::focusInEvent(QFocusEvent *event)
{QLineEdit::focusInEvent(event);timer->disconnect();connect(timer, &QTimer::timeout, this, &DynamicUnderlineLineEdit::inFocus);timer->start();
}void DynamicUnderlineLineEdit::focusOutEvent(QFocusEvent *event)
{QLineEdit::focusOutEvent(event);timer->disconnect();connect(timer, &QTimer::timeout, this, &DynamicUnderlineLineEdit::outFocus);timer->start();
}

三、下载链接

https://download.csdn.net/download/u013083044/88864880

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/485469.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis高性能原理

redis大家都知道拥有很高的性能&#xff0c;每秒可以支持上万个请求&#xff0c;这里探讨下它高性能的原理。单线程架构和io多路复用技术。 一&#xff0c;单线程架构 单线程架构指的是命令执行核心线程是单线程的&#xff0c;数据持久化、同步、异步删除是其他线程在跑的。re…

【安卓基础4】Activity(二)

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频链接 &#xff08;他们的视频后面一部分没再更新&#xff0c;看看前面也…

软考29-上午题-【数据结构】-排序

一、排序的基本概念 1-1、稳定性 稳定性指的是相同的数据所在的位置经过排序后是否发生变化。若是排序后&#xff0c;次序不变&#xff0c;则是稳定的。 1-2、归位 每一趟排序能确定一个元素的最终位置。 1-3、内部排序 排序记录全部存放在内存中进行排序的过程。 1-4、外部…

YOLOv5推理时出现:assert im0 is not None, f‘Image Not Found {path}‘

一、问题展示 Traceback (most recent call last):File "/media/hadoop/yolov5-7.0/detect.py", line 259, in <module>main(opt)File "/media/hadoop//yolov5-7.0/detect.py", line 254, in mainrun(**vars(opt))File "/home/hadoop/anaconda…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(一)

在我们开始探索人工智能的世界时&#xff0c;了解如何与之有效沉浸交流是至关重要的。想象一下&#xff0c;你手中有一把钥匙&#xff0c;可以解锁与OpenAI的GPT模型沟通的无限可能。这把钥匙就是——正确的提示词&#xff08;prompts&#xff09;。无论你是AI领域的新手&#…

npm/nodejs安装、切换源

前言 发现自己电脑上没有npm也没有node很震惊&#xff0c;难道我没写过代码么&#xff1f;不扯了&#xff0c;进入正题哈哈…… 安装 一般没有npm的话会报错&#xff1a; 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称而且报这个错&#xff0c;我们执行…

python专业版破解激活(超详细)

python专业版破解激活 1.下载pycharm应用程序 这里我使用的版本是pycharm-professional-2023.3.2 下载pycharm程序的连接为&#xff1a; 百度网盘 请输入提取码 提取码为&#xff1a;nym0 2.安装 选择安装路径 下一步 这里全选 下一步 这里直接点击安装就可&#xff0c;其…

Java学习笔记2024/2/22

面向对象进阶部分学习方法&#xff1a; 特点&#xff1a; 逻辑性没有那么强&#xff0c;但是概念会比较多。 记忆部分重要的概念&#xff0c;理解课堂上讲解的需要大家掌握的概念&#xff0c;多多练习代码。 今日内容 复习回顾 static关键字 继承 教学目标 能够掌握st…

守护绿色屏障:智能高压森林应急消防泵|恒峰智慧科技

在茂密的森林中&#xff0c;树木蓊郁&#xff0c;绿意盎然。这里是大自然赋予我们的宝贵财富&#xff0c;是我们人类赖以生存的重要资源。然而&#xff0c;随着人类活动的增加&#xff0c;森林火灾频发&#xff0c;给我们的生活带来了极大的威胁。为了保护这片绿色屏障&#xf…

缓存篇—缓存雪崩、缓存击穿、缓存穿透

缓存异常会面临的三个问题&#xff1a;缓存雪崩、击穿和穿透。 其中&#xff0c;缓存雪崩和缓存击穿主要原因是数据不在缓存中&#xff0c;而导致大量请求访问了数据库&#xff0c;数据库压力骤增&#xff0c;容易引发一系列连锁反应&#xff0c;导致系统奔溃。不过&#xff0…

ChatGPT在数据处理中的应用

ChatGPT在数据处理中的应用 今天的这篇文章&#xff0c;让我不断体会AI的强大&#xff0c;愿人类社会在AI的助力下走向更加灿烂辉煌的明天。 扫描下面二维码注册 ​ 数据处理是贯穿整个数据分析过程的关键步骤&#xff0c;主要是对数据进行各种操作&#xff0c;以达到最终的…

【命令行工具kubectl】

如何在k8s的任意节点使用用kubectl # 正常在node节点上是无法执行kubectl命令 [rootk8s-node-01 ~]# kubectl get pods The connection to the server localhost:8080 was refused - did you specify the right host or port?1、将master节点中/etc/kubernetes/,admin.conf拷…