生活随笔
收集整理的這篇文章主要介紹了
第六章 事件系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019-9-12
事件
一個事件會有多個事件類型
處理事件的方法:
1)重新實現事件處理函數,只能用來處理特定部件的特定事件
2)重新實現notify函數,一次只能處理一個事件
3)向QApplication安對象裝事件過濾器,可以同時處理多個事件
4)重新實現event函數
5)在對象上安裝事件過濾器
事件傳遞:
exec函數使應用程序進入事件循環->QEvent子類表示->傳遞給QObject對象或其子對象這里采用第一種事件處理方法
事件是先傳遞給指定窗口部件、如果忽略,就會傳遞給其父部件
QLineEdit::keyPressEvent(event); // 執行QLineEdit類的默認事件處理
//一般都是調用父類的相應事件處理函數來實現默認操作
event->ignore(); // 忽略該事件
事件過濾器:
eventFilter(QObject *obj, QEvent *event) // 事件過濾器
obj是被監視的事件,安裝了事件過濾器之后,就能對指定的事件進行自己想要的處理,返回true的
話,就可以使一個對象不響應某個事件
lineEdit->installEventFilter(this); // 在Widget上為lineEdit安裝事件過濾器
這樣我們就將事件過濾器安裝到了this之上,以后在this上發生的事件都會經過eventFilter過濾
在本部件上監視lineEdit部件
事件過濾器,焦點部件的event函數,焦點部件的事件處理函數,父部件的事件處理函數
鼠標事件和滾輪事件
event->globalPos():是鼠標指針在桌面上的位置
pos():窗口在桌面上的位置,窗口不動的時候,即使鼠標動,它的值也是一樣的
鍵盤事件
if(event->modifiers() == Qt::ControlModifier) // 是否按下Ctrl鍵
if(event->key() == Qt::Key_M) // 是否按下M鍵
按鍵的自動重復就是說這個按鍵在一直被按下,我們需要避免這種情況
我們這里可以捕捉到最后一次按下!
定時器事件與隨機數
事件過濾器和事件發送
事件過濾器可以方便的處理多個部件的多個事件,如果不用它的話,還要子類化不同的部件,
重新實現它們對應的各個事件處理函數。
還提供了發送事件的功能。
總結
以上是生活随笔為你收集整理的第六章 事件系统的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。