Qt事件處理的五個層次

來源:互聯網
上載者:User

我是個Qt新手,一直對Qt事件處理的流程不是太清楚,看了這篇文章(見http://devbean.blog.51cto.com/448512/231861),然後經過自己的思考,把Qt事件處理的五個層次、同時也是Qt時間處理的流程畫了出來。若有不對請批評指正,不勝感激!

層次圖(即事件處理流程圖)及其說明如下:





說明如下:

sendEvent()會把event直接發送給QCoreApplication的notify(),postEvent()把event追加到事件隊列中最終也要調用notify(),notify()把事件分發給參數中的receiver,如果receiver安裝了eventFilter,那麼event會發給定義這個事件過濾器的監控者,如果這個event沒有被過濾,那麼這個event會被傳給receiver的event()函數,event()函數再把這個event傳給與其相應的事件處理函數(諸如keyPressEvent()之類的函數)。這些事件處理函數這才是真正響應event的函數,它們才是真正幹活的,到這裡算是處理完了。

這個過程中,許可權是由大到小的,不算sendEvent()和postEvent和事件迴圈,notify具有最大控制權,因為它最先見到event,我們可以重寫notify()開始的這個處理鏈上的函數來響應event,從而進行相應的操作。


整個流程中,只有postEvent()和最後的事件處理函數是void類型,其它函數都是bool型。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.