知识随记-----用 Qt 打造优雅的密码输入框:添加右侧眼睛图标切换显示

Qt 技巧:通过 QLineEdit 右侧眼睛图标实现密码可见性切换

文章目录

  • Qt 技巧:通过 QLineEdit 右侧眼睛图标实现密码可见性切换
    • 概要
    • 整体架构流程
    • 技术名词解释
    • 技术细节
    • 实现效果展示

概要

本文介绍如何使用 Qt 框架为 QLineEdit 控件添加一个右侧的眼睛图标,通过点击实现密码的显示与隐藏功能。这种方法相比传统在右侧添加按钮并放置图标的方式,更具集成性和美观性,适合现代应用程序的用户界面设计

整体架构流程

实现这一功能的主要步骤包括:

  1. 准备资源:加载隐藏和显示密码状态的图标(例如 eyebrow (1).pngeye (1).png)。
  2. 创建 QAction:为 QLineEdit 添加可切换的 QAction 图标。
  3. 绑定信号与槽:通过 QAction::toggled 信号,动态切换 QLineEdit 的回显模式(setEchoMode)和图标。
  4. 界面更新:根据用户点击状态,实时更新 UI 效果。

整体流程以事件驱动的方式运行,用户点击图标触发信号,槽函数处理逻辑并更新界面

技术名词解释

  • QLineEdit:Qt 提供的单行文本输入控件,用于处理用户输入,支持设置回显模式(如密码模式)。
  • QAction:Qt 的动作类,可用于菜单、工具栏或小部件,具备可切换(setCheckable)和图标设置功能。
  • setEchoModeQLineEdit 的方法,用于设置文本显示方式,QLineEdit::Password 隐藏输入,QLineEdit::Normal 显示明文。
  • toggledQAction 发出的信号,当 checkable 动作状态改变时触发。

技术细节

以下是实现代码的详细说明:

  • 资源加载:使用 QIcon 加载资源文件 :/chat_img/eyebrow (1).png(隐藏状态)和 :/chat_img/eye (1).png(显示状态)。这些资源需在 .qrc 文件中注册。
  • QAction 配置:为每个 QLineEdit 创建一个 QAction,初始图标为 eyeIcon,并设置为可切换状态。
  • setCheckable 的功能

定义

setCheckable(bool) 方法将 QAction 设置为可检查状态(true)或不可检查状态false)
当设置为 true 时,QAction 会具有“选中”(checked)和“未选中”(unchecked)两种状态,用户可以通过交互(例如点击)切换其状态。

作用

状态切换:可检查的 QAction 会在触发时发送 toggled(bool) 信号,通知其状态是否改变(true 表示选中,false 表示未选中)

视觉反馈:在 UI 中,QAction 的表示(例如菜单项或工具栏按钮)会显示选中状态(通常通过勾选标记或高亮),具体取决于上下文(如 QMenuQToolBar)。
QLineEdit 结合:代码中,togglePwd1Action 被添加到 QLineEdit 的 TrailingPosition,通过 addAction,图标会显示为可点击的元素,setCheckable(true) 使点击时状态切换,从而触发你定义的 lambda 槽函数。

默认行为

默认情况下,QAction checkable 属性为 false,表示它只是一个普通的动作,不会维护选中状态

  • 信号槽连接:通过 connecttoggled 信号与lambda表达式绑定,动态切换回显模式和图标。
  • 代码实现
   //隐藏QIcon eyeIcon(":/chat_img/eyebrow (1).png");//展示QIcon dpeyeIcon(":/chat_img/eye (1).png");// 为第一个密码框添加图标QAction* togglePwd1Action = new QAction(eyeIcon, "显示/隐藏密码", this);togglePwd1Action->setCheckable(true);ui->userpwd_edit->addAction(togglePwd1Action, QLineEdit::TrailingPosition);// 为第二个密码框添加图标QAction* togglePwd2Action = new QAction(eyeIcon, "显示/隐藏密码", this);togglePwd2Action->setCheckable(true);ui->lineEdit->addAction(togglePwd2Action, QLineEdit::TrailingPosition);connect(togglePwd1Action, &QAction::toggled, this, [this,togglePwd1Action,eyeIcon,dpeyeIcon](bool checked) {ui->userpwd_edit->setEchoMode(checked ? QLineEdit::Normal : QLineEdit::Password);togglePwd1Action->setIcon(checked ? dpeyeIcon : eyeIcon);});connect(togglePwd2Action, &QAction::toggled, this, [this,togglePwd2Action,eyeIcon,dpeyeIcon](bool checked) {ui->lineEdit->setEchoMode(checked ? QLineEdit::Normal : QLineEdit::Password);togglePwd2Action->setIcon(checked ? dpeyeIcon : eyeIcon);});

实现效果展示

在这里插入图片描述
通过上述方法,我们成功为 QLineEdit 添加了右侧的眼睛图标,实现密码的显示与隐藏切换。这种方式不仅提升了用户体验,还优化了界面布局,避免了传统按钮方案的笨重感

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

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

相关文章

Unity里的对象旋转数值跳转问题的原理与解决方案

文章目录1. 问题描述2. 问题原因3. 解决方案3.1通过多个父子关系从而控制旋转(推荐)3.2 使用四元数进行旋转1. 问题描述 我们现在写一个3D的Unity程序,我们现在设置了一个物体后,我们想旋转使其改为我们想要的情况。但是我们如果…

为什么现代 C++ (C++11 及以后) 推荐使用 constexpr和模板 (Templates) 作为宏 (#define) 的替代品?​

我们用现实世界的比喻来深入理解​​为什么 C 中的宏 (#define) 要谨慎使用,以及为什么现代 C (C11 及以后) 推荐使用 constexpr 和模板 (Templates) 作为替代品。​​🧩 ​​核心问题:宏 (#define) 是文本替换​​想象宏是一个 ​​“无脑的…

PyCharm vs. VSCode 到底哪个更好用

在 Python 开发者中,关于 PyCharm 和 VSCode 的讨论从未停止。一个是功能齐备的集成开发环境(IDE),另一个是轻快灵活的代码编辑器。它们代表了两种不同的开发哲学,选择哪个,往往取决于你的项目需求、个人习…

FPGA学习笔记——VGA彩条显示

目录 一、任务 二、分析 三、代码 四、实验现象 五、更新 一、任务 使用VGA实现彩条显示,模式是640x48060。 二、分析 首先,模式是640x48060,那么对照以下图标,知道其它信息,不清楚时序和VGA扫描方式的可以看看这…

ES-301A :让 Modbus 设备无缝接入工业以太网的高效桥梁

在工业自动化领域,串口设备与以太网的互联互通是提升系统效率的关键。ES-301A 工业以太网串口网关作为上海泗博自动化精心打造的专业解决方案,以强大的协议转换能力、工业级可靠性和灵活配置特性,成为连接 Modbus RTU/ASCII 设备与 Modbus TC…

【学习笔记】FTP库函数学习

【学习笔记】FTP库函数学习 FTP基本指令步骤 1、初始化会话句柄:CURL *curl curl_easy_init(); 2、设置会话选项: 设置服务器地址,设置登录用户和密码 curl_easy_setopt(curl, CURLOPT_URL, ftp_server); curl_easy_setopt(curl, CURLOPT_US…

ARM Cortex-M异常处理高级特性详解

1. 异常处理概述 ARM Cortex-M处理器提供了高效的异常处理机制,包含多种硬件优化特性,显著提升了中断响应性能和系统效率。这些特性对于实时嵌入式系统和网络协议栈(如LwIP)的性能至关重要。 1.1 Cortex-M异常处理架构 Cortex-M异…

【图像算法 - 08】基于 YOLO11 的抽烟检测系统(包含环境搭建 + 数据集处理 + 模型训练 + 效果对比 + 调参技巧)

一、项目背景与需求 【打怪升级 - 08】基于 YOLO11 的抽烟检测系统(包含环境搭建 数据集处理 模型训练 效果对比 调参技巧)今天我们使用YOLO11来训练一个抽烟检测系统,基于YOLO11的抽烟检测系统。我们使用了大概两万张图片的数据集训练了…

vue2升级vue3中v-model的写法改造

vue2选项式 <template><div><el-rowclass"group-title":title"$t(restore_default_parameters)">{{ $t(restore_default_parameters) }}</el-row><el-form-item :label"$t(restore_default_parameters)" class"…

5G-LEO 简介

1. 什么是 5G-LEO 5G-LEO 指的是将 5G 新空口&#xff08;5G NR&#xff09;服务扩展到低轨卫星&#xff08;LEO&#xff09;上的非地面网络&#xff08;NTN, Non-Terrestrial Network&#xff09;方案。通过在距地面约500–2 000 km 的低轨道卫星上部署通信载荷&#xff0c;5G…

【MCAL】AUTOSAR架构下SPI数据同步收发具体实现

目录 前言 正文 1.依赖的SPI硬件特性 1.1. SPI时隙参数配置 1.2. SPI数据发送和接收模式 2.MCAL中的SPI配置 3.软件的具体实现 3.1. Spi_SyncTransmit 3.2. Spi_lSyncTransmit 3.3. Spi_lSyncStartJob 3.4. Spi_lSyncTransmitData8Bit 3.5. Spi_lSynTransErrCheck …

SQL157 更新记录(一)

描述现有一张试卷信息表examination_info&#xff0c;表结构如下图所示&#xff1a;FiledTypeNullKeyExtraDefaultCommentidint(11)NOPRIauto_increment(NULL)自增IDexam_idint(11)NOUNI(NULL)试卷IDtagchar(32)YES(NULL)类别标签difficultychar(8)YES(NULL)难度durationint(11…

悬赏任务系统小程序/APP源码,推荐任务/发布任务/会员服务

1. 我们承诺及优势本店源码承诺&#xff1a;1&#xff09;. 店长亲测 - 100%完整可运行2&#xff09;. 含详细安装文档3&#xff09;. 支持二次开发定制4&#xff09;. 专业客服随时解答5&#xff09;. 技术团队保障质量2. 功能详细说明主要功能 模块 角色 解释说明 用户登录和…

Ubuntu20.04系统上使用YOLOv5训练自己的模型-1

在Ubuntu系统上使用YOLOv5训练自己的模型&#xff0c;你需要遵循以下步骤。这里我将详细说明如何从准备数据集到训练模型的整个过程。 步骤 1: 安装依赖项 首先&#xff0c;确保你的Ubuntu系统上安装了Python、PyTorch和必要的库。你可以使用以下命令安装这些依赖项&#xff1a…

解决微信小程序中camera组件被view事件穿透触发对焦以及camera的bindtap事件

view跟camera组件同级 不要用bind:tap和catch:tap 替换用catch:touchstart即可解决&#xff01; 如果你不放心&#xff0c;可以再加个透明蒙版&#xff0c;这样就不会触发了&#xff01;&#xff08;不加这个也行&#xff0c;但是必须要用catch:touchstart&#xff09;<!-- …

【Redis】移动设备离线通知推送全流程实现:系统推送服务与Redis的协同应用

在移动应用开发中&#xff0c;应用未启动时的通知推送是提升用户体验的核心需求之一。当用户未主动启动 App 时&#xff0c;如何通过手机通知栏触达用户&#xff0c;确保关键信息&#xff08;如订单提醒、系统警报&#xff09;不丢失&#xff1f;本文将尝试解析从 系统推送服务…

WebView 中控制光标

在 WebView 中控制光标&#xff08;如移动焦点、获取/设置光标位置、显示/隐藏光标等&#xff09;需要根据具体场景和平台&#xff08;Android/iOS/Web&#xff09;采用不同的方法。以下是常见场景的解决方案&#xff1a;一、Web 页面中的光标控制&#xff08;JavaScript&#…

2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——决策树

2025国赛数学建模C题详细思路模型代码获取见文末名片 决策树算法&#xff1a;从原理到实战&#xff08;数模小白友好版&#xff09; 1. 决策树是什么&#xff1f;——用生活例子理解核心概念 想象你周末想决定是否去野餐&#xff0c;可能会这样思考&#xff1a; 根节点&#xf…

从底层架构到多元场景:计算机构成与应用的深度剖析

一、引言1.1 研究背景与意义在当今数字化时代&#xff0c;计算机已成为推动社会进步和经济发展的核心力量&#xff0c;其身影遍布生活、工作、学习的各个角落。从个人日常使用的笔记本电脑、智能手机&#xff0c;到企业运营中不可或缺的服务器、大型机&#xff0c;再到科研领域…

控制建模matlab练习08:根轨迹

此练习主要是&#xff1a;在matlab中绘制根轨迹的方法。 一、在matlab中建立对应系统 1、例如&#xff0c;对于如图的反馈系统。 2、其中开环传递函数G(s)、闭环传递函数Gcl(s)。3、因此&#xff0c;其闭环传递函数的根轨迹&#xff0c;就可以直接在matlab中绘制出来。 4、直接…