当前位置: 首页 > news >正文

09 Qt扩展LineEdit组件:Input输入框

系列文章目录

01 Qt自定义风格控件的基本原则-CSDN博客

02 从QLabel聊起:自定义控件扩展-图片控件-CSDN博客

03 从QLabel聊起:自定义控件扩展-文本控件-CSDN博客

04 自定义Button组件:令人抓狂的QToolButton文本图标居中问题-CSDN博客

05 扩展组件:自定义CheckBox组件-CSDN博客

06 Qt自绘组件:Switch动画开关组件-CSDN博客

07 Qt自绘组件:图片预览小组件ImageViewer-CSDN博客

08 Qt自绘制日历控件:摆脱丑的让人无语的原生QCalendarWidget-CSDN博客

文章目录

目录

系列文章目录

文章目录

前言

一、示意图

Qt原生式样风格

 Qt扩展组件目标效果图

 下图为按钮常驻风格:

 下图为动态控制按钮显隐风格:

二、实现思路

概述

1.继承基类QLineEdit!

2.使用QLineEdit::addAction

功能接口举例

 关于如何更改QLineEdit按钮图标的大小

总结

前言

QLineEdit是Qt框架中的一个类,用于创建一个单行文本输入框,用户可以在这个输入框中输入文本。QLineEdit提供了一系列功能和属性,用于处理用户输入、文本显示和编辑等操作。QLineEdit是Qt中常用的控件之一,适用于需要用户输入文本的场景,如登录界面、搜索框、设置界面等。通过QLineEdit提供的丰富功能,可以实现灵活的文本输入和处理逻辑。

但是QLineEdit的风格还是比较单调, 这里想记录下自己在业务开发过程中对于Qt-Gui框架的原生Edit控件的封装、功能扩展思路!


一、示意图

Qt原生式样风格

 Qt扩展组件目标效果图

 下图为按钮常驻风格:

 下图为动态控制按钮显隐风格:

二、实现思路

概述

1.继承基类QLineEdit!

我们不需要继承QWidget类,然后从0开始完全重写一个LineEdit组件。

因为,我注意到有的同学的封装思想是这样的:为了添加一个按钮,将QLineEdit用QWidget类包了一层,然后水平布局了一个控制按钮在左边或右边。

这种思路当然也行的通, 但是,这无疑增加了很多冗余工作量,至少单单从添加控制按钮的角度,我们无需如此!

2.使用QLineEdit::addAction

可能一部分的业务开发者,忽略了这个神器接口,这个接口正是我们添加功能按钮的底气! 

        

功能接口举例


class QUIEXTPLUGIN_EXPORT QUiInput : public QLineEdit
{Q_OBJECTpublic://按钮的显隐模式enum ButtonVisibleMode{ShowAlways =0,//始终显示OnGetFocus,//获取焦点时显示OnHasText,//有文本时};QUiInput(QWidget *parent);~QUiInput();//添加控制按钮:按钮图标, 按钮位置, 返回值为按钮idint addButton(const QString& imgPath, QLineEdit::ActionPosition pos, ButtonVisibleMode mode);//控制按钮点击信号
signals:void buttonClicked(int btnId);/***********省略************************
};

 关于如何更改QLineEdit按钮图标的大小

以下为QLineEdit部分源码:

源码文件名:

        qlineedit_p.cpp

路径:

        Src\qtbase\src\widgets\widgets


QLineEditPrivate::SideWidgetParameters QLineEditPrivate::sideWidgetParameters() const
{Q_Q(const QLineEdit);SideWidgetParameters result;result.iconSize = q->style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, q);result.margin = result.iconSize / 4;result.widgetWidth = result.iconSize + 6;result.widgetHeight = result.iconSize + 2;return result;
}

 从以上源码中,我们可以看到, QLineEdit的图标大小很难更改,不仅如此, 在iconSize得到之后,QLineEdit的按钮宽、高也就固定了, 分别为:iconSize + 6、iconSize + 2。

所以,妄图想更改按钮图标的宽高、以及margin的同学就别在奢望了,建议找美工从UI图片上解决!

那有的同学非要改,本人这边也提供一个思路,那就是继承QCommonStyle。参考代码如下:

#include <QCommonStyle>
class QCustomStyle : public QCommonStyle
{
public:QCustomStyle(): QCommonStyle(){}int pixelMetric(QStyle::PixelMetric m, const QStyleOption *opt, const QWidget *widget) const{int size = QCommonStyle::pixelMetric(m, opt, widget);if(QStyle::PM_SmallIconSize == m){size = 30;//目标值}return size;}
};

 然后,将重写的风格类更新到目标QLineEdit控件上:

    QCustomStyle* pCustomStyle = new QCustomStyle();pInput2->setStyle(pCustomStyle);

总结

以上就是今天要分享的:Qt如何丰富、扩展QLineEdit组件!

既聊思路,也说代码!我们下次继续分享其他自定义风格扩展组件!

PS:本专栏所有篇幅涉及的UI扩展组件类,会封装成插件动态库,感兴趣的同学可以留言哦

相关文章:

  • icon格式软解码
  • 使用Homebrew搭建java环境
  • 基于PyTorch深度学习实战入门系列-(2)Numpy基础上
  • 定时执行专家V7.1 多国语言版本日文版发布 - タスク自動実行ツールV7.1 日本語版リリース
  • 通过iframe下载文件,怎么判断文件是否下载成功?
  • Linux minfo命令教程:详解MS-DOS文件系统参数查看命令(附实例详解和注意事项)
  • 阿里云k8s环境下,因slb限额导致的发布事故
  • 云服务器操作系统如果不小心被删除了文件,那岂不是不能进系统了?
  • Spring Boot启动流程详解
  • Java后端 - 一面凉经 - 得物(国际电商)
  • 安装sqlserver2022最新版只能使用.\SQLEXPRESS登录数据库怎么修改成.
  • Java实战:Spring Boot整合Canal与RabbitMQ实时监听数据库变更并高效处理
  • 2023年第三届中国高校大数据挑战赛(第二场)A题思路
  • EVE-NG桥接虚拟网卡实现与虚拟机通讯
  • RESTful接口规范参考
  • 78. Subsets
  • Android组件 - 收藏集 - 掘金
  • CODING 缺陷管理功能正式开始公测
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • flutter的key在widget list的作用以及必要性
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • HTTP--网络协议分层,http历史(二)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js如何打印object对象
  • spark本地环境的搭建到运行第一个spark程序
  • storm drpc实例
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 记录一下第一次使用npm
  • 前端面试之闭包
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 组复制官方翻译九、Group Replication Technical Details
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #ifdef 的技巧用法
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (23)Linux的软硬连接
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (汇总)os模块以及shutil模块对文件的操作
  • (三十五)大数据实战——Superset可视化平台搭建
  • (一)UDP基本编程步骤
  • (一)基于IDEA的JAVA基础12
  • (转)创业家杂志:UCWEB天使第一步
  • (转载)从 Java 代码到 Java 堆
  • *上位机的定义
  • .NET Framework .NET Core与 .NET 的区别
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项