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