知識隨記-----用 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
英文地址,請注明出處:http://en.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、直接…