QDialog之遮蔽Esc鍵

2021-07-11 15:35:33 字數 1090 閱讀 5255

簡述

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...