实现自定义QDateEdit可删除日期值

news2024/11/24 1:18:34

在Qt框架中,QDateEdit是一个用于编辑日期的控件,如果想要删除QDateEdit不是特别好做,如果直接获取QDateEdit中的QLineEdti并设置显示删除按钮(代码如下所示),删除按钮会一直显示,效果并不好,所以继承QDateEdit重新定义样式是比较方便。

QLineEdit *lineEdit = pDateEdit->findChild<QLineEdit*>();
lineEdit->setClearButtonEnabled(true);

 头文件:

class customDateEdit :public QDateEdit
{
	Q_OBJECT
public:
	explicit customDateEdit();
	~customDateEdit();

public slots:
	void slot_clearDate();

protected:
	bool eventFilter(QObject *obj, QEvent *event) override;
	void focusOutEvent(QFocusEvent *event) override;
private:
	void init();
	void updateClearBtnPosition(QLineEdit *lineEdit);// 更新清除按钮的位置

private:
	QToolButton *m_pBtnClear = nullptr;
	QLineEdit *m_pLineEdit = nullptr;
};

源文件:


customDateEdit::customDateEdit()
{
	init();
}

customDateEdit::~customDateEdit()
{
}

void customDateEdit::slot_clearDate()
{
	this->setSpecialValueText(" ");
	m_pLineEdit->clear();
}

bool customDateEdit::eventFilter(QObject * obj, QEvent * event)
{
	if (obj == this->findChild<QLineEdit*>()) {
		if (event->type() == QEvent::Resize) {
			QLineEdit *lineEdit = qobject_cast<QLineEdit*>(obj);
			if (lineEdit) {
				updateClearBtnPosition(lineEdit);
			}
		}
		else if (event->type() == QEvent::MouseMove) {
			QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
			QLineEdit *lineEdit = qobject_cast<QLineEdit*>(obj);
			if (lineEdit) {
				// 计算清除按钮的位置
				int clearButtonWidth = m_pBtnClear->sizeHint().width();
				int clearButtonX = lineEdit->width() - clearButtonWidth;
				if (mouseEvent->pos().x() >= clearButtonX) {
					//如果文本框中有内容再显示
					if (lineEdit->text().size() > 0)
					{
						// 显示清除按钮
						m_pBtnClear->show();
					}
				}
				else {
					// 隐藏清除按钮
					m_pBtnClear->hide();
				}
			}
		}
		else if (event->type() == QEvent::Leave) {
			QLineEdit *lineEdit = qobject_cast<QLineEdit*>(obj);
			if (lineEdit) {
				// 隐藏清除按钮
				m_pBtnClear->hide();
			}
		}
	}
	return QDateEdit::eventFilter(obj, event);
}

void customDateEdit::focusOutEvent(QFocusEvent * event)
{
    //以免失去焦点自动setDate
	QDateEdit::focusOutEvent(event);
}

void customDateEdit::init()
{
	// 获取QLineEdit控件
	m_pLineEdit = findChild<QLineEdit*>();
	if (m_pLineEdit)
	{
		//创建自定义删除按钮
		m_pBtnClear = new QToolButton(m_pLineEdit);
		QIcon clearIcon = QApplication::style()->standardIcon(QStyle::SP_LineEditClearButton);
		m_pBtnClear->setIcon(clearIcon);
		m_pBtnClear->setCursor(Qt::ArrowCursor);
		m_pBtnClear->setStyleSheet("QToolButton { border: none; padding: 0px; }");
		m_pBtnClear->hide();
		
		// 连接清除按钮的点击信号到槽函数
		connect(m_pBtnClear, &QToolButton::clicked, this, &CDateEditWithDel::slot_clearDate);

		// 安装事件过滤器
		m_pLineEdit->installEventFilter(this);

		// 更新清除按钮的位置
		updateClearBtnPosition(m_pLineEdit);

		m_pLineEdit->setPlaceholderText(QString::fromLocal8Bit("选择日期"));// 设置提示文本

		//初始化默认清空
		slot_clearDate();
	}
	setFocusPolicy(Qt::NoFocus);//默认失去焦点,防止光标一直跳动

}

void customDateEdit::updateClearBtnPosition(QLineEdit * lineEdit)
{
	int nClearButtonWidth = m_pBtnClear->sizeHint().width();
	m_pBtnClear->setGeometry(lineEdit->width() - nClearButtonWidth, 0, nClearButtonWidth, lineEdit->height());
}

效果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SIP 消息的路由和 7 个相关的 Header IMS-HSS 中的透明数据及非透明数据(VoNR、VoLTE均用)

目录 1. SIP 消息的路由和 7 个相关的 Header 1.1 SIP 消息路由相关的7个Header 1.2 理解 Record-Route 和 Route 1.3 Record-Route 和 Route 流程举例 1.4 SIP 请求消息的路由原则 1.5 SIP 请求消息路由举例 1.6 SIP 请求消息路由原则和流程举例 2. IMS-HSS 中的透明数…

【C++指南】命名空间

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 一、命名空间的重要性 1. C语言中没有命名空间而存在的问题 2. C引入了命名空间解决的问题 3.…

【论文速读】《LLM4CP: Adapting Large Language Models for Channel Prediction》

论文地址&#xff1a; https://ieeexplore.ieee.org/document/10582829 前言&#xff1a;之前就想&#xff0c;大语言模型是否可以通过微调用于通信系统的无线空口应用&#xff0c;这篇文章给出了答案。通过讲信道状态信息进行嵌入和注意力操作&#xff0c;变成大语言模型可以…

Map和Set及哈希--的奥秘(详解)

目录&#xff1a; 一 搜索树&#xff1a; 二. 搜索相关概念 三.Map 的说明 四. Set 的说明 五.哈希表: 一 搜索树&#xff1a; 1.概念&#xff1a; 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: (1). 若它的左子树不为空&a…

常见中间件漏洞复现之【Jboss】!

Jboss介绍 JBoss是⼀个基于J2EE的开发源代码的应⽤服务器。JBoss代码遵循LGPL许可&#xff0c;可以在任何商业应⽤中免费使⽤。JBoss是⼀个管理EJB的容器和服务器&#xff0c;⽀持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核⼼服务不包括⽀持servlet/JSP的WEB容器&#xff0c;⼀般…

61 函数参数——可变长度参数

可变长度参数在定义函数时主要有两种形式&#xff1a;*parameter 和 **parameter&#xff0c;前者主要用来接收任意多个实参并将其放在一个元组中&#xff0c;后者接收类似于关键参数一样显示赋值形式的多个实参并将其放入字典中。 # 无论调用该函数时传递了多少实参&#xff…

鸿蒙Harmony开发:onFrame逐帧回调规范

通过返回应用onFrame逐帧回调的方式&#xff0c;让开发者在应用侧的每一帧都可以设置属性值&#xff0c;从而实现设置了该属性值对应组件的动画效果。 使用animator实现动画效果 使用如下步骤可以创建一个简单的animator&#xff0c;并且在每个帧回调中打印当前插值。 引入相…

萌新的Java入门日记18

一、mybatis范围筛选 1.第一种表示方法 <!--resultType 查出来的结果自贡每一行都要映射到该类型的对象--><select id"getStaff" resultType"com.easy.bean.Staff">select * from staff<!--根据参数不同组合出不同的SQL语句 动态SQL语句…

java之IO篇——工具包Commons-io和Hutool

前言 结束了IO篇的File、基本流和高级流。还要认识IO流的一些工具包Commons-io和hutool&#xff0c;不算是框架&#xff0c;但是非常实用。 目录 前言 一、Commons-io 1.来历及作用 2.使用 二、Hutool 1.简介 2.使用 一、Commons-io 1.来历及作用 Commons-io是apache…

C++第七篇 模板初阶和STL简介

目录 一&#xff0c;模板初阶 1.泛型编程 2.函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3.类模板(模板类&#xff0c;模板函数) 3.1 类模板定义格式 二&#xff0c;STL简介 1. 什么是STL 2. ST…

【JUC】并发编程与源码分析 1-7章

1 线程基础知识复习 1把锁&#xff1a;synchronized&#xff08;后面细讲&#xff09; 2个并&#xff1a; 并发&#xff08;concurrent&#xff09;&#xff1a;是在同一实体上的多个事件&#xff0c;是在一台机器上“同时”处理多个任务&#xff0c;同一时刻&#xff0c;其…

【学习笔记】A2X通信的协议(三)- A2X PC5通信(一)

目录 6. A2X通信 6.1 A2X PC5通信 6.1.1 一般说明 6.1.2 通过NR-PC5的单播模式A2X通信 6.1.2.1 概述 6.1.2.2 A2X PC5单播链路建立程序 6.1.2.2.1 一般说明 6.1.2.2.2 发起UE启动A2X PC5单播链路建立程序 6.1.2.2.3 目标UE接受的A2X PC5单播链路建立程序 6.1.2.2.5 目…

学单片机怎么在3-5个月内找到工作?

每个初学者&#xff0c;都如履薄冰&#xff0c;10几年前&#xff0c;我自学单片机时&#xff0c;也一样。 想通过学习&#xff0c;找一份体面点的工作&#xff0c;又害怕辛辛苦苦学出来&#xff0c;找不到工作。 好在&#xff0c;当初执行力&#xff0c;还算可以&#xff0c;自…

WebLogic

二、WebLogic 2.1 后台弱口令GetShell 漏洞描述 通过弱口令进入后台界面&#xff0c;上传部署war包&#xff0c;getshell 影响范围 全版本(前提后台存在弱口令) 漏洞复现 默认账号密码:weblogic/Oracle123weblogic常用弱口令: Default Passwords | CIRT.net这里注意&am…

设计模式--结构型

类适配器 #include <queue> #include <iostream> #include <algorithm> #include <iterator>using namespace std;// 目标接口 class Target {public:virtual ~Target() {}virtual void method() 0; };// 适配者类 class Adaptee {public:void spec_…

CHIESI凯西医药:外企入职测评综合能力及性格测试SHL题库测评真题解析

CHIESI凯西医药是一家意大利国际制药集团&#xff0c;以研发为核心&#xff0c;专注于呼吸道健康、罕见疾病和专科治疗的创新治疗方案。集团总部位于意大利帕尔马市&#xff0c;拥有超过85年的历史&#xff0c;业务遍及全球31个国家和地区&#xff0c;拥有7,000多名员工。2023年…

day22(mysql数据库主从搭建)

上午&#xff1a; 1、为mysql添加开机启动chkconfig 2、编辑配置文件my.cnf 3、修改环境变量 4、mysql角色授权 角色不生效 在配置文件中不添加activate_all_roles_on_loginon glibc安装&#xff0c;my.cnf在项目目录之下 rpm安装&#xff0c;my.cnf文件在/etc/my.cnf 5、自…

函数实例讲解(五)

文章目录 提取字符串必学的函数&#xff08;LEFT、MID、RIGHT、LEN、LENB&#xff09;1、LEFT2、RIGHT3、MID4、LEN5、LENB 提取实战套路知多少1、FIND2、ISNUMBER 利用随机函数来抽奖&#xff08;RAND、RANDBETWEEN&#xff09;1、RAND2、RANDBETWEEN 排名的几种套路&#xff…

解决nacos疯狂报错“user nacos not found”

nacos疯狂报错“user nacos not found” 参考博客&#xff1a;https://blog.csdn.net/cnskylee/article/details/137640113 背景&#xff1a;项目启动后一直刷“user nacos not found”报错信息&#xff0c;但是不影响接口调用 解决&#xff1a; 1、将nacos版本切换为2.2.2&am…

ET实现游戏中聊天系统逻辑思路(服务端)

目录 一、准备工作 1.1 前言 1.2 完善聊天服务器 1.3 自定义聊天服消息 二、玩家登录聊天服 2.1 Gate网关与聊天服通讯 2.2 保存玩家实体映射实例ID 三、处理聊天逻辑 3.1 发送聊天消息的定义 3.2 定义聊天记录组件 3.3 编写发送聊天消息处理类 ET是一个游戏框架&…