【Qt】Qt之密碼框不可選中、複製、貼上、無右鍵選單等【轉】
簡述
在做使用者登入、修改密碼的時候,往往會用到密碼框,其中一些功能要求與普通的輸入框不同,例如:不能選中、複製、貼上、無右鍵選單等功能,當然設定密碼不可見是必須的!
下面介紹兩種方式來實現相同的效果。
效果
基礎部分
//設定無右鍵選單
setContextMenuPolicy(Qt::NoContextMenu);
//設定無輸入時提示資訊
setPlaceholderText(QStringLiteral("請輸入密碼"));
//設定密碼效果模式
setEchoMode(QLineEdit::Password);
//設定最大輸入長度16位
setMaxLength(16);
enum QLineEdit::EchoMode
這個列舉值描述輸入框如何顯示內容。
常數 | 值 | 描述 |
---|---|---|
QLineEdit::Normal | 0 | 輸入時,正常顯示字元,預設值 |
QLineEdit::NoEcho | 1 | 不顯示任何資訊,密碼長度、資訊需要保密時比較適用 |
QLineEdit::Password | 2 | 顯示平臺相關的密碼掩碼字元,而非實際的字元輸入 |
QLineEdit::PasswordEchoOnEdit | 3 | 編輯時候顯示字元,編輯結束後和QLineEdit::Password效果一樣 |
事件過濾器
介面說明
首先看下介面說明:
void QObject::installEventFilter(QObject * filterObj)
為物件安裝一個filterObj事件過濾器,例如:
monitoredObj->installEventFilter(filterObj);
事件過濾器物件接受傳送到被觀察者物件的所有事件,可以停止事件或將其轉發到被觀察者物件。事件過濾器物件通過eventFilter() 來接受事件,如果指定的事件被過濾則必須返回true,否則返回false。
如果一個物件安裝多個事件過濾器,那麼,最後安裝的過濾器首先被啟用。
警告:如果在eventFilter()函式中刪除接收物件,一定要返回true。如果返回false,Qt給已刪除的物件傳送事件,程式會crash。
注意,過濾器物件必須和被觀察者物件處於同一執行緒。如果過濾器物件在不同的執行緒,這個函式什麼都不做。如果在呼叫這個函式之後,過濾器物件或被觀察者物件被移動到不同的執行緒,事件過濾器將不會被呼叫,直到兩個物件再處於相同的執行緒中。
實現方式
首先,需要判斷被觀察的物件,也就是這裡的obj,我們觀察的是密碼框QLineEdit,所以先進行轉換。
然後進行事件判斷與轉換:滑鼠移動對應的事件型別為mouseMoveEvent,滑鼠雙擊對應的事件型別為mouseDoubleClickEvent,全選、複製、貼上對應的事件型別為keyPressEvent,當接收到這些事件時,需要被過濾掉,所以返回true。
注意:return QObject::eventFilter(obj, event)這句程式碼很關鍵,這裡的意思是繼續傳遞該事件到被觀察者,由其本身呼叫相應的事件。
bool EventFilter::eventFilter(QObject *obj, QEvent *event)
{
QLineEdit *pLineEdit = qobject_cast<QLineEdit *>(obj);
if (pLineEdit != NULL)
{
switch (event->type())
{
case QEvent::MouseMove: //滑鼠移動事件
case QEvent::MouseButtonDblClick: //滑鼠雙擊事件
return true;
case QEvent::KeyPress: //鍵盤事件
{
QKeyEvent *pKeyEvent = static_cast<QKeyEvent*>(event);
if(pKeyEvent->matches(QKeySequence::SelectAll)
|| pKeyEvent->matches(QKeySequence::Copy)
|| pKeyEvent->matches(QKeySequence::Paste))
{
return true;
}
}
}
}
return QObject::eventFilter(obj, event);
}
事件重寫
這種方式可能是大多數人都能想到的,針對輸入框重新實現(PasswordLineEdit繼承於QLineEdit)。
如上,我們分析得出滑鼠移動對應的事件型別為mouseMoveEvent,滑鼠雙擊對應的事件型別為mouseDoubleClickEvent,全選、複製、貼上對應的事件型別為keyPressEvent,那麼我們重寫相應的事件即可。
//遮蔽輸入框全選、複製、貼上功能
void PasswordLineEdit::keyPressEvent(QKeyEvent *event)
{
if(event->matches(QKeySequence::SelectAll)
|| event->matches(QKeySequence::Copy)
|| event->matches(QKeySequence::Paste))
{
return;
}
QLineEdit::keyPressEvent(event);
}
//滑鼠位於密碼框中時不可移動
void PasswordLineEdit::mouseMoveEvent(QMouseEvent *event)
{
Q_UNUSED(event);
}
//滑鼠雙擊密碼框時不可選中
void PasswordLineEdit::mouseDoubleClickEvent(QMouseEvent *event)
{
Q_UNUSED(event);
}
原始碼下載
相關推薦
【Qt】Qt之密碼框不可選中、複製、貼上、無右鍵選單等【轉】
簡述 在做使用者登入、修改密碼的時候,往往會用到密碼框,其中一些功能要求與普通的輸入框不同,例如:不能選中、複製、貼上、無右鍵選單等功能,當然設定密碼不可見是必須的! 下面介紹兩種方式來實現相同的效果。 簡述 效果 基礎部分 事件過濾器 介面說明 實現方式 事件重
【Qt】Qt國際化(系統文字-QMessageBox按鈕、QLineEdit右鍵選單等)【轉】
簡介 使用Qt的時候,經常會遇到英文問題,例如:QMessageBox中的按鈕、QLineEdit、QSpinBox、QScrollBar中的右鍵選單等。通常情況下,我們軟體都不會是純英文的,那麼如何處理這些問題呢?其實這也屬於國際化的一部分。 下面,以中英文切換為例來為大家分享,其它語言切換
[Tricks] 為資料夾右鍵選單增加 【使用VS Code 開啟】
傳統的IDE安裝之後都會在資料夾的右鍵選單中增加如【Open in Visual Studio】或者【Open Folder as IntelliJ IDEA Project】這樣的選項 但VS Code作為一個輕量級的Editor安裝完畢之後並沒有這個選單,這裡手動通過修改登錄檔來增加這個選單 使用cmd開
【Qt】選單欄、工具欄、狀態列、右鍵選單的實現
在QMainWidget基礎上實現選單欄、工具欄、狀態列、右鍵選單。 標頭檔案: #ifndef GWDEMO_H #define GWDEMO_H #include <QMainWindow> #include <QMenu> #include <Q
【Layui】關於單選框的選中狀態,下拉框預設顯示
author:咔咔 wechat:fangkangfk 案例: 我們先看一下點選修改電影這個分類的資料 在修改的這個頁面裡邊,分類也是迴圈出來的 只需要讓查出的來的id跟這個迴圈的
Qt之右鍵選單
1、右鍵選單建立和顯示作為一種互動性強、使用方便的右鍵選單在程式中是非常常用的,在Qt中可以輕鬆的實現。QMenu menu; //新增選單項,指定圖示、名稱、響應函式 menu.addAction(QIcon("1.png"), QStringLiteral("新增"),this,SLOT(OnBscGr
asp.net記住密碼功能之密碼框不能賦值
一、設定密碼框 在asp.NET中密碼框並不神奇,只是將普通TextBox的TextMode屬性值修改為Password即可; 二、防止頁面重新整理清空密碼框 TextBox一旦被修改為密碼框,其填充的值會隨著頁面的重新整理而被清空,處理方法如下: 在頁面後臺,P
【原創】MAC利用AUTOMATOR製作右鍵選單一鍵獲取MARKDOWN圖片外鏈
PicUploader 是一個用php編寫的藉助Mac的『自動操作/Automator』來幫助你快速上傳你的圖片到七牛雲/騰訊雲/網易雲/百度雲/阿里雲/京東雲/sm.ms並自動把地址拼接成markdown格式放到剪貼簿的小工具(故只有MacOS使用者能
Qt QListWidget QTreeWidget QComboBox等控制元件中,禁用滾動條的右鍵選單
有時候在開發新控制元件的時候,會偶然點到滾動條的右鍵選單,出現之後很難看 那麼怎麼去掉呢? 其實很簡單,如果是QListWidget ,QTreeWidget控制元件, //記得包含標頭檔案 #i
【ZedGraph】右鍵選單和滑鼠滾軸的移動縮放等功能的啟用和禁用
本文是個人對使用過的【ZedGraph】基本功能的小結,現在逐步完善中... 通過【ZedGraph】控制元件屬性修改: 1.禁用右鍵選單: IsShowContextMenu = false; 2.禁用滑鼠滾軸移動: IsEnableHPan = false; //禁止橫
【ZedGraph】刪除或重新命名(漢化)右鍵選單
本文結合網路資源,結合自身實踐進行了部分整理和改動,現逐步完善中,內容僅供參考。 網路資源部分轉載自:http://blog.sina.com.cn/main_v5/ria/private.html?uid=1806259402 在zedgraph生成的圖表中,右鍵選單會出
PyQt 右鍵選單的實現(Qt.CustomContextMenu方式)
從Qt文件Qt::ContextMenuPolicy的值可以看出,實現右鍵選單的方式有三種,這對於所有繼承於QWidget的類都是通用的,在用每一種方式實現之前都要呼叫QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy)方
javascript自定義右鍵選單並遮蔽預設右鍵選單【原創】
原理很簡單,就是右擊滑鼠(oncontextmenu事件)return false阻止預設右鍵選單,之後顯示自定義的右鍵選單,選單顯示位置由事件源的clientX和clientY計算得出。 [html] view plain copy print?
Qt右鍵選單的新增
滑鼠事件是學習Qt必不可少的一個事件,初學者總是會忽略這一點,而右鍵選單在平常的使用中更是常見,下面就Qt中新增右鍵選單的幾種方法做一簡單的介紹: 1、滑鼠事件新增 /**重寫滑鼠處理器*/ void QWidget::mousePressEvent(QMo
【Unity編輯器】使用反射和Attribute實現自定義右鍵選單
unity提供了許多Attribute,比如[MenuItem]和[ContextMenu],一個是在編輯器選單欄中新增選單按鈕,一個是在檢視面板新增上下文選單,由於其原理是基於C#的Attribute功能,我們自然可以想到,是否可以自己編寫一套自定義Attribute,來
【JQuery】右鍵選單外掛——contextmenu
右鍵選單外掛可以繫結頁面中的任意元素,繫結後,選中元素,點選右鍵,便通過該外掛彈出一個快捷選單,點選選單各項名稱執行相應操作,呼叫程式碼如下: $(selector).contextMenu(menu
Dev DevExpress之treelist右鍵選單實現
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
JS學習筆記 - 自定義右鍵選單、文字框只能輸入數字
<script> // 事件總共有2個部分, //1.點選滑鼠右鍵的表現 oncontextmenu 2.點選滑鼠左鍵的表現(即普通點選onclick) // 點選右鍵,div位置定位到滑鼠所在位置, 且阻止滑鼠右鍵的預設選單 // 點選左
OpenLayers 3 之 新增地圖滑鼠右鍵選單
新增右鍵選單,首先我們要監聽滑鼠右鍵點選的操作,我們知道滑鼠右鍵事件名是 contextmenu,當滑鼠在 html 元素之上,點選滑鼠右鍵,便會觸發 contextmenu 事件,在 contextmenu 事件的回撥函式中實現相應的顯示選單功能即
AE學習筆記之右鍵選單的新增與實現
ArcGIS Engine 中自定義了一些新增命令、工具和選單的基類,在需要寫相應函式的時候可以直接很方便的新增。 我在前面的文章裡面有一節講述過如何新增控制元件命令:http://blog.csdn.net/my_lord_/article/detail