QLineEdit 按回车/失去焦点

server/2025/1/15 12:04:33/
1、目的

因为QLineEdit在写值时回车和失去焦点都会发出editingFinished,现在自定义控件回车或失去焦点并且值有改变才会处理一次,并能够处理的intdouble型数据去除多余的0。

2、方法

处理回车应该重写控件事件keyPressEvent函数,失去焦点应该重写focusOutEvent函数,并再回车时调用clearFocus从而触发失去焦点事件;至于去掉多余0就很简单了,只需将字符串传成int或double再转成字符串。

3、效果

在这里插入图片描述

4、源代码
a.头文件
#ifndef CUSTOMLINEEDIT_H
#define CUSTOMLINEEDIT_H#include <QKeyEvent>
#include <QLineEdit>class CustomLineEdit : public QLineEdit {Q_OBJECTpublic:enum NumericType {IntType = 0,DoubleType,};CustomLineEdit(NumericType numerciType, QWidget *parent = Q_NULLPTR);CustomLineEdit(NumericType numerciType, QString initText,QWidget *parent = Q_NULLPTR);signals:void editFinishedAndChanged();  // 编辑完成并改变值protected:void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;private:void dealData();QString removeSurplusZeros(const QString &value);private:QString pre_Text_;                    // 前一个值NumericType numeric_Type_ = IntType;  // 控件数据
};#endif  // CUSTOMLINEEDIT_H
b.头文件
#include "customlineedit.h"CustomLineEdit::CustomLineEdit(NumericType numerciType, QWidget *parent): CustomLineEdit(numerciType, "", parent) {}CustomLineEdit::CustomLineEdit(NumericType numerciType, QString initText,QWidget *parent): QLineEdit(initText, parent),numeric_Type_(numerciType),pre_Text_(initText) {}void CustomLineEdit::keyPressEvent(QKeyEvent *event) {// 处理回车if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) {clearFocus();  // 按回车后让控件失去焦点,触发失去焦点focusOutEvent}QLineEdit::keyPressEvent(event);
}void CustomLineEdit::focusOutEvent(QFocusEvent *event) {// 处理失去焦点dealData();QLineEdit::focusOutEvent(event);
}void CustomLineEdit::dealData() {if (text().isEmpty()) {setText(pre_Text_);} else {setText(removeSurplusZeros(text()));}if (pre_Text_ != text()) {emit editFinishedAndChanged();pre_Text_ = text();}
}QString CustomLineEdit::removeSurplusZeros(const QString &value) {// 移除多余0,并判断范围是否超出则返回QString retValue;switch (numeric_Type_) {case IntType: {bool ok;int num = value.toInt(&ok);if (!ok) {// 转换失败,返回原字符串retValue = value;} else {retValue = QString::number(num);}} break;case DoubleType: {bool ok;double num = value.toDouble(&ok);if (!ok) {// 转换失败,返回原字符串retValue = value;} else {// 这注意double转QString的精度问题retValue = QString::number(num, 'g', 10);}} break;default: {retValue = value;} break;}return retValue;
}

对你有用就点个赞👍,以后需要用到就收藏⭐


http://www.ppmy.cn/server/158549.html

相关文章

【ArcGIS微课1000例】0137:色彩映射表转为RGB全彩模式

本文讲述ArcGIS中,将tif格式的影像数据从色彩映射表转为RGB全彩模式。 参考阅读:【GlobalMapper精品教程】093:将tif影像色彩映射表(调色板)转为RGB全彩模式 文章目录 一、色彩映射表预览二、色彩映射表转为RGB全彩模式一、色彩映射表预览 加载配套数据包中的0137.rar中的…

CSS语言的多线程编程

CSS语言的多线程编程探讨 在当今网络应用中&#xff0c;网页的交互性能和用户体验显得尤为重要。用户对页面的加载速度、界面响应的流畅性有着越来越高的要求。为了实现更好的性能表现&#xff0c;前端开发中采用了多线程编程的理念。而在谈及多线程编程时&#xff0c;CSS言及…

高级java每日一道面试题-2025年01月13日-框架篇[Spring篇]-Spring 是怎么解决循环依赖的?

如果有遗漏,评论区告诉我进行补充 面试官: Spring 是怎么解决循环依赖的? 我回答: 在Java高级面试中&#xff0c;Spring框架如何解决循环依赖是一个重要且常见的问题。以下是对Spring解决循环依赖的详细解释&#xff1a; 循环依赖的定义与类型 循环依赖是指两个或多个Bea…

5 list 语法

在 Shell 脚本中&#xff0c;列表&#xff08;数组&#xff09;是一种非常有用的数据结构&#xff0c;可以用来存储多个值。 定义数组 # 定义一个空数组 my_array()# 定义一个带有初始值的数组 my_array("value1" "value2" "value3")访问数组元…

k8s故障 ImagePullBackOff状态排错

需看yaml 这个策略是否开启

(蓝桥杯)二维数组前缀和典型例题——子矩阵求和

题目描述 小 A 同学有着很强的计算能力&#xff0c;张老师为了检验小 AA同学的计算能力&#xff0c;写了一个 n 行 m 列的矩阵数列。 张老师问了小 A 同学 k 个问题&#xff0c;每个问题会先告知小 A 同学 4 个数 x1,y1,x2,y2画出一个子矩阵&#xff0c;张老师请小 A同学计算出…

计算机视觉算法实战——手写公式识别(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​​​​​​​​​​​​​​​​ 1. 领域介绍✨✨ 手写公式识别&#xff08;Handwritten Mathematical Expression Recognition, HME…

Excel如何制作轮班表

Excel如何制作轮班表 1. 概念讲解2. 例子3. 详细讲解3.1 前期准备3.2 人员依次编号3.3 填入日期&#xff0c;和日期编号3.4 Mod函数-填充值班人员编号3.4 Vlookup函数-进行查找人员 操作文档 1. 概念讲解 轮班是指一种工作安排系统&#xff0c;员工每天、每周或每月在不同班次…