還記得我們在main函數裏面創建了壹個QApplication對象,然後調用了它的exec()函數嗎?其實,這個函數就是開始Qt的事件循環。在執行exec()函數之後,程序將進入事件循環來監聽應用程序的事件。當事件發生時,Qt將創建壹個事件對象。Qt的所有事件都繼承於 QEvent類。在事件對象創建完畢後,Qt將這個事件對象傳遞給QObject的event()函數。event()函數並不直接處理事件,而是按照事件對象的類型分派給特定的事件處理函數(event handler)。
在所有組件的父類QWidget中,定義了很多事件處理函數,如keyPressEvent()、
keyReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent ()、mousePressEvent()、mouseReleaseEvent()等。這些函數都是protected virtual的,也就是說,我們應該在子類中重定義這些函數。