簡述
qt中esc鍵會在一些控制項中預設的進行一些事件的觸發,比如:qdialog,按下esc鍵視窗消失。大多數情況下,我們不需要這麼做,那麼就需要對預設事件進行遮蔽。
簡述 原始碼分析
事件過濾器
事件重寫
重寫reject
原始碼分析
通過檢視qdialog的原始碼,我們很容易會發現keypressevent事件中,當按下esc鍵時,會預設執行reject()。
void qdialog::keypressevent(qkeyevent *e)
else
if (!e->modifiers() || (e->modifiers() & qt::keypadmodifier && e->key() == qt::key_enter)) }}
break;
case qt::key_escape:
reject();
break;
default:
e->ignore();
return;
}} else
}
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
17 18
19 20
21 22
23 24
25 26
27 28
29 30
31 32
33 34
35 36
ok,我們如果想改變esc鍵的預設動作,則可以通過兩種途徑:
重寫esc鍵對應的事件
重寫reject()
事件過濾器
對qdialog使用事件過濾器,過濾esc鍵。
installeventfilter(new eventfilter(this));
bool eventfilter::eventfilter(qobject *obj, qevent *event)
{ qdialog *pdialog = qobject_cast
MFC對話方塊程式遮蔽回車與ESC鍵
取消掉 確定 按鈕的default button屬性,按回車鍵程式依然會退出,即使把 確定 按鈕刪除掉,效果也是一樣。看了下 inside visual c 引用一下書中的原話 當使用者按下enter鍵時,windows就會自動去查詢 輸入焦點 落在了哪乙個按鈕上,獲得焦點的按鈕的四周將被點線矩形框...
MFC對話方塊程式遮蔽回車與ESC鍵
取消掉 確定 按鈕的default button屬性,按回車鍵程式依然會退出,即使把 確定 按鈕刪除掉,效果也是一樣。看了下 inside visual c 引用一下書中的原話 當使用者按下enter鍵時,windows就會自動去查詢 輸入焦點 落在了哪乙個按鈕上,獲得焦點的按鈕的四周將被點線矩形框...
vc 簡單遮蔽alt F4鍵 ESC和ENTER鍵
void cmainframe onsyscommand uint nid,lparam lparam cframewnd onsyscommand nid,lparam 按下esc和enter鍵時禁止關閉對話方塊 方法一 1 過載oncancel和onok,遮蔽其中的cdialog oncance...