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