天天看點

Qt之密碼框不可選中、複制、粘貼、無右鍵菜單等簡述效果基礎部分事件過濾器事件重寫源碼下載下傳

在做使用者登入、修改密碼的時候,往往會用到密碼框,其中一些功能要求與普通的輸入框不同,例如:不能選中、複制、粘貼、無右鍵菜單等功能,當然設定密碼不可見是必須的!

下面介紹兩種方式來實作相同的效果。

<a href="#%e7%ae%80%e8%bf%b0">簡述</a>

<a href="#%e6%95%88%e6%9e%9c">效果</a>

<a href="#%e5%9f%ba%e7%a1%80%e9%83%a8%e5%88%86-1">基礎部分</a>

<a href="#%e4%ba%8b%e4%bb%b6%e8%bf%87%e6%bb%a4%e5%99%a8">事件過濾器</a>

<a href="#%e6%8e%a5%e5%8f%a3%e8%af%b4%e6%98%8e">接口說明</a>

<a href="#%e5%ae%9e%e7%8e%b0%e6%96%b9%e5%bc%8f">實作方式</a>

<a href="#%e4%ba%8b%e4%bb%b6%e9%87%8d%e5%86%99">事件重寫</a>

<a href="#%e6%ba%90%e7%a0%81%e4%b8%8b%e8%bd%bd">源碼下載下傳</a>

Qt之密碼框不可選中、複制、粘貼、無右鍵菜單等簡述效果基礎部分事件過濾器事件重寫源碼下載下傳

<code>enum qlineedit::echomode</code>

這個枚舉值描述輸入框如何顯示内容。

常數

描述

qlineedit::normal

輸入時,正常顯示字元,預設值

qlineedit::noecho

1

不顯示任何資訊,密碼長度、資訊需要保密時比較适用

qlineedit::password

2

顯示平台相關的密碼掩碼字元,而非實際的字元輸入

qlineedit::passwordechoonedit

3

編輯時候顯示字元,編輯結束後和qlineedit::password效果一樣

首先看下接口說明:

<code>void qobject::installeventfilter(qobject * filterobj)</code>

為對象安裝一個filterobj事件過濾器,例如:

<code>monitoredobj-&gt;installeventfilter(filterobj);</code>

事件過濾器對象接受發送到被觀察者對象的所有事件,可以停止事件或将其轉發到被觀察者對象。事件過濾器對象通過eventfilter() 來接受事件,如果指定的事件被過濾則必須傳回true,否則傳回false。

如果一個對象安裝多個事件過濾器,那麼,最後安裝的過濾器首先被激活。

警告:如果在eventfilter()函數中删除接收對象,一定要傳回true。如果傳回false,qt給已删除的對象發送事件,程式會crash。

注意,過濾器對象必須和被觀察者對象處于同一線程。如果過濾器對象在不同的線程,這個函數什麼都不做。如果在調用這個函數之後,過濾器對象或被觀察者對象被移動到不同的線程,事件過濾器将不會被調用,直到兩個對象再處于相同的線程中。

首先,需要判斷被觀察的對象,也就是這裡的obj,我們觀察的是密碼框qlineedit,是以先進行轉換。

然後進行事件判斷與轉換:滑鼠移動對應的事件類型為mousemoveevent,滑鼠輕按兩下對應的事件類型為mousedoubleclickevent,全選、複制、粘貼對應的事件類型為keypressevent,當接收到這些事件時,需要被過濾掉,是以傳回true。

注意:return qobject::eventfilter(obj, event)這句代碼很關鍵,這裡的意思是繼續傳遞該事件到被觀察者,由其本身調用相應的事件。

這種方式可能是大多數人都能想到的,針對輸入框重新實作(passwordlineedit繼承于qlineedit)。

如上,我們分析得出滑鼠移動對應的事件類型為mousemoveevent,滑鼠輕按兩下對應的事件類型為mousedoubleclickevent,全選、複制、粘貼對應的事件類型為keypressevent,那麼我們重寫相應的事件即可。

<a href="http://download.csdn.net/detail/u011012932/9367262">qt之密碼框不可選中、複制、粘貼無右鍵菜單等</a>

繼續閱讀