Qt 事件系统的解读
文章目錄
- Qt 事件系統(tǒng)
- 題記:
- 1、QEvent 類關(guān)系圖
- 2、Qt中的事件
- 3、 事件的處理
- 4、事件的傳遞
- 5 、事件過濾器與事件的發(fā)送
Qt 事件系統(tǒng)
題記:
突然想感慨幾句話:
1、熟悉Qt的框架的確不是一朝一夕的事情。首先要懂得C++的語法規(guī)則、其次還需要不斷摸索理解Qt的框架。
2、概念性的知識建構(gòu)是是一個逐級遞增的過程,這個過程就像打地基一樣不斷夯實(shí)。可能一本工具書,需要翻閱不僅僅是一遍兩遍。看十遍的效果和看一遍的效果是不一樣的。看五十遍和看十遍的效果更是不一樣。
3、通過一些小小項(xiàng)目實(shí)踐來體驗(yàn)編程了樂趣。
Qt的事件系統(tǒng)這部分內(nèi)容稍顯的復(fù)雜。本篇就來梳理梳理吧
1、QEvent 類關(guān)系圖
Qt中,事件作為上一個對象,繼承QEvent類。常見的有QKeyEvent、鼠標(biāo)事件QMouseEvent和定時器事件QTimerEvent 等。
2、Qt中的事件
事件是對各種應(yīng)用程序需要知道的由應(yīng)用程序內(nèi)部或者外部產(chǎn)生的事情或者動作的通稱。
事件和信號是不同層面的東西,發(fā)出者不同,作用也不同。
在Qt中,任何QObject 子類都可以接收和處理事件。
3、 事件的處理
一個事件由一個特定的QEvent子類來表示。
事件可以包含多個事件類型,比如鼠標(biāo)事件可以分為鼠標(biāo)按下,雙擊、和移動等多種操作。
5種處理事件的方法:
方法一:重新實(shí)現(xiàn)部件的paintEvent()、mousePressEvent()等事件處理方法。該方法最常用,但只能處理特定部件的特定事件
方法二:重新實(shí)現(xiàn)notify() 函數(shù)。這個函數(shù)功能強(qiáng)大,提供了完全的控制,可以在事件過濾器得到事件之前就捕獲它們。但是,它一次只能處理一個事件。
方法三:向QApplication對象上安裝事件過濾器。
方法四:重新實(shí)現(xiàn)event()函數(shù)。該函數(shù)可以在事件到達(dá)默認(rèn)的事件處理函數(shù)之前獲得該事件。
方法五:安裝事件過濾器。
4、事件的傳遞
在每一個程序的main()函數(shù)的最后都會調(diào)用QApplication類的exec()函數(shù),它會使Qt應(yīng)用程序進(jìn)入事件循環(huán)。
事件的傳遞過程:
- 事件先遞給指定窗口部件,或者說是先傳遞給獲得焦點(diǎn)的窗口部件。
- 如果該部件忽略掉該事件,該事件就會傳遞給這個部件的父部件。
注意:在重新實(shí)現(xiàn)事件處理函數(shù)時,一般要調(diào)用父類的相應(yīng)事件處理函數(shù)來實(shí)現(xiàn)默認(rèn)操作。
5 、事件過濾器與事件的發(fā)送
Qt 提供了事件過濾器來在一個部件中監(jiān)控其他多個部件的事件。
事件過濾器與其他部件不同,它不是一個類,二是由兩個函數(shù)組成的一組操作。
事件過濾器用來完成一個部件對其他部件的事件的監(jiān)視。
這兩個函數(shù)分別是installFilter() 和eventFilter()
總結(jié)
關(guān)于事件內(nèi)容的概述就這么多,具體的應(yīng)用還是要結(jié)合實(shí)例來理解。
總結(jié)
以上是生活随笔為你收集整理的Qt 事件系统的解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断点是否在凸多边形内
- 下一篇: Qt 数据库操作(二)