1. 事件
????????事件是對各種應用程序需要知道的由應用程序內部或者外部產生的事情或者動作的通稱。在Qt中使用一個對象來表示一個事件,它繼承自QEvent類。
2. 事件和信號
????????事件與信號并不相同,比如我們使用鼠標點擊了一下界面上的按鈕,那么就會產生鼠標事件QMouseEvent(不是按鈕產生的),而因為按鈕被按下了,所以它會發出clicked()單擊信號(是按鈕產生的)。這里一般只關心按鈕的單擊信號,而不用考慮鼠標事件,但是如果要設計一個按鈕,或者當鼠標點擊按鈕時讓它產生別的效果,那么就要關心鼠標事件了。可以看到,事件與信號是兩個不同層面的東西,它們的發出者不同,作用也不同。
????????常見事件:鼠標事件、鍵盤事件、定時事件、上下文菜單事件、關閉事件、拖放事件、繪制事件等。
3. 事件的處理
方法一:重新實現部件的paintEvent(),mousePressEvent()等事件處理函數。這是最常用也的一種方法,不過它只能用來處理特定部件的特定事件。
方法二:重新實現notify()函數。這個函數功能強大,提供了完全的控制,可以在事件過濾器得到事件之前就獲得它們。但是,它一次只能處理一個事件。
方法三:向QApplication對象上安裝事件過濾器。因為一個程序只有一個QApplication對象,所以這樣實現的功能與使用notify()函數是相同的,優點是可以同時處理多個事件。
方法四:重新實現event()函數。QObject類的event()函數可以在事件到達默認的事件處理函數之前獲得該事件。
方法五:在對象上安裝事件過濾器。使用事件過濾器可以在一個界面類中同時處理不同子部件的不同事件。
在實際編程中,最常用的是方法一,其次是方法五。
4. QEvent類
????????基本的 QEvent 只包含了一個事件類型參數。QEvent 的子類包含了額外的描述特定事件的參數。枚舉QEvent::Type:這個枚舉類型定義了Qt中有效的事件類型。事件類型和每個類型的專門類如下: