Qt事件過濾器

2022-07-15 03:00:13 字數 912 閱讀 1502

昨天發了blog之後,網友提供一種不用子類化的方式來實現左鍵雙擊,就是使用qobject提供的事件過濾器來實現對其他物件的事件進行響應。這裡先安裝對應物件的事件過濾器,installeventfilter(this),這樣只要該物件產生事件,就會先執行本物件的eventfilter()函式,在該函式裡先判斷是否是我們需要處理的事件,如果是則處理返回true,如果不是則返回false,那麼該事件則會傳遞下去,進行處理。

這裡我初始化了乙個:

1  ui->sendtextedit->installeventfilter(this);2

3bool mainwindow::eventfilter(qobject *target, qevent *event)4

14}1516

return

false

;17 }

不過測試發現滑鼠的左鍵雙擊無效,中間和右鍵雙擊都可以,這裡糾結了,發現不了什麼原因,試了其他的mouse事件也都無法觸發左鍵的事件,只能懷疑是左鍵事件被什麼遮蔽掉了,最後google到了答案,原來qplaintextedit類是派生自qabstractscrollarea類的,而該類將左鍵的事件是在viewport上的,所以要這樣設定:

1 ui->sendtextedit->viewport()->installeventfilter(this);2

3bool mainwindow::eventfilter(qobject *target, qevent *event)4

14}1516

return

false

;17 }

這樣寫就可以實現左鍵雙擊事件的過濾了,qabstractscrollarea派生出來的類還有qtextedit/qtextbrowser,都得用viewport來監測左鍵事件。

Qt 事件過濾器

qt 事件模型乙個真正強大的特色是乙個qobject的例項能夠管理另乙個qobject 例項的事件。乙個事件過濾器的安裝需要下面2個步驟 1 呼叫installeventfilter 註冊需要管理的物件。2 在eventfilter 裡處理需要管理的物件的事件。偽 如下 pfilterlineedi...

Qt 事件過濾器

目標部件有事件產生後,首先會傳遞給監視物件 事件過濾器 進行處理而不是該事件對應的事件處理器。所以說我們可以截獲事件進行處理。監視物件截獲目標物件的事件後就會呼叫自己的eventfilter 函式處理這些事件。bool qobject eventfilter qobject object,qeven...

QT 事件過濾器 滾輪事件

this installeventfilter this 註冊監視物件下面是eventfilter函式 bool xx eventfilter qobject obj,qevent e else page resize size return true else else if wheelevent...