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扩展组件类,会封装成插件动态库,感兴趣的同学可以留言哦

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

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

相关文章

C++ 之LeetCode刷题记录(三十七)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表…

力扣hot8---滑动窗口

这里先跳过力扣hot7啦&#xff0c;这几天就回更~ 题目&#xff1a; 滑动窗口思路&#xff1a; 首先左窗口&#xff08;left&#xff09;指向的是第0个元素&#xff0c;依次遍历循环每一个元素&#xff0c;维护一个unordered_set&#xff0c;如果当前被遍历的元素存在于unorder…

Java基础 - 6 - 面向对象(二)

Java基础 - 6 - 面向对象&#xff08;一&#xff09;-CSDN博客 二. 面向对象高级 2.1 static static叫做静态&#xff0c;可以修饰成员变量、成员方法 2.1.1 static修饰成员变量 成员变量按照有无static修饰&#xff0c;分为两种&#xff1a;类变量、实例变量&#xff08;对象…

【ES入门一:基础概念】

集群层面上的基础概念 集群 由多个es实例组成的叫做集群 节点 单个ES的服务实例叫做节点。每个实例都有自己的名字&#xff0c;就是在配置文件中配置的‘node.name’中的内容。为了标识每个节点&#xff0c;每个节点启动后都会分配一个UID&#xff0c;存储在data目录。每个…

“而且,再加上”可以用哪个语法来表示,柯桥考级韩语学习

语法 --는/은/ㄴ 데다가 1.语法&#xff1a;는/은/ㄴ 데다가 2.表示&#xff1a;用于谓词词干和体词谓词形后, 表示在原有的状况上再加上其他情况。 3.添加&#xff1a; 4.例句&#xff1a; 当然&#xff0c;与这个语法含义相近的还有不少语法&#xff0c;有一部分是初级暂时…

QUIC来了!

什么是QUIC QUIC&#xff0c;快速UDP网络连接(Quick UDP Internet Connection)的简称&#xff0c;即RFC文档描述它为一个面向连接的安全通用传输协议。其基于UDP协议实现了可靠传输及拥塞控制&#xff0c;简单来说&#xff0c;QUIC TCP TLS。 为什么有了QUIC HTTP2.0为了为了…

Tomcat -2

① 单机反向代理 7-2 代理服务器 7-5 tomcat 设置 7-3 测试&#xff1a; 代理服务器那里写什么就显示什么 ② 多机反向代理 实现动静分离和负载均衡 7-2 nginx 7-3 7-5 测试&#xff1a; 看静态&#xff1a; 看动态&#xff1a; ③ 反向代理多机多级 7-2 7-1 和 7-4 7-3…

GIS之深度学习05:VisualStudio安装教程

在安装CUDA前&#xff0c;建议先安装VisualStudio&#xff0c;以防报错 VisualStudio安装步骤简单&#xff0c;但时间较长。。。。。。 正文开始&#xff1a; VisualStudio官网&#xff1a;Visual Studio: IDE and Code Editor for Software Developers and Teams 点击右上角…

Vscode连接外部虚拟环境

如果vscode工程目录里面有一个超级大的虚拟环境文件夹&#xff0c;怎么说都不是一件优雅的事&#xff0c;因此我们希望这个虚拟环境在工程目录外部&#xff0c;我们开始&#xff1a; 1. 复制虚拟环境目录路径&#xff1a;E:\envs\test 2. 在vscode中打开文件夹&#xff0c;CT…

37.云原生之springcloud+k8s+GitOps+istio+安全实践

云原生专栏大纲 文章目录 准备工作项目结构介绍配置安全测试ConfigMapSecret使用Secret中数据的方式Deployment使用Secret配置Secret加密 kustomize部署清单ConfigMap改造SecretSealedSecretDeployment改造Serviceistio相关资源DestinationRuleGatewayVirtualServiceServiceAc…

两天学会微服务网关Gateway-Gateway HelloWorld快速入门

锋哥原创的微服务网关Gateway视频教程&#xff1a; Gateway微服务网关视频教程&#xff08;无废话版&#xff09;_哔哩哔哩_bilibiliGateway微服务网关视频教程&#xff08;无废话版&#xff09;共计17条视频&#xff0c;包括&#xff1a;1_Gateway简介、2_Gateway工作原理、3…

职场高效人士的秘密:如何合理安排事情优先级

在职场中&#xff0c;面对繁杂的工作任务&#xff0c;如何合理安排事情的优先级&#xff0c;提高工作效率&#xff0c;成为每个职场人士必须面对的问题。本文将为您揭示职场高效人士的秘密&#xff0c;帮助您掌握合理安排事情优先级的技巧。 一、明确工作目标 在安排事情优先级…