文章目錄
- 1. 事件
- 1.1 事件的介紹
- 1.2 事件的處理
- 2. 按鍵事件
- 3. 鼠標事件
- 4. 定時器
- 5. 窗口事件

1. 事件
1.1 事件的介紹
事件是應用程序內部或者外部產生的事情或者動作的統稱。
在 Qt 中使用?個對象來表示?個事件。所有的 Qt 事件均繼承于抽象類 QEvent。事件是由系統或者 Qt 平臺本?在不同的時刻發出的。
當用戶按下?標、鍵盤,或者是窗?需要重新繪制的時候,都會發出?個相應的事件。?些事件是在??操作時發出,如鍵盤事件、?標事件等,另?些事件則是由系統本身自動發出,如定時器事件。
常見的 Qt 事件如下:
注意:事件不像信號槽一樣需要關聯,而是讓當前類,重寫某個事件處理函數,通過多態的機制實現
1.2 事件的處理
事件處理?般常用的?法為:重寫相關的 Event 函數。
在 Qt 中,?乎所有的 Event 函數都是虛函數,所以可以重新實現。
如:在實現?標的進?和離開事件時,直接重新實現 enterEvent() 和 leaveEvent() 即可。
enterEvent() 和 leaveEvent() 函數原型如下
下面我們實現一個鼠標事件
先添加一個類,然后重寫
enterEvent
方法
將我們創建的Label提升為自己的MyLabel
此時,當我們的鼠標進入Label,就會顯示如下內容
下面,我們使用事件,實現一個按鈕隨機移動的案例
2. 按鍵事件
Qt 中的按鍵事件是通過 QKeyEvent 類來實現的。當鍵盤上的按鍵被按下或者被釋放時,鍵盤事件便會觸發。
在幫助文檔中查找 QKeyEvent 類如下:
其中,鍵盤上的按鍵都已在枚舉類型Qt::key中羅列出來
- 單個按鍵
示例:當某個按鍵被按下時,輸出:某個按鍵被按下了;
- 組合按鍵
Qt::KeyboardModifier 中定義了在處理鍵盤事件時對應的修改鍵。在 Qt 中,鍵盤事件可以與修改鍵?起使用,以實現?些復雜的交互操作。
3. 鼠標事件
- 鼠標按下事件
在 Qt 中,?標按下是通過虛函數 mousePressEvent() 來捕獲的。mousePressEvent() 函數原型如下
?標左右鍵及滾的表?如下:
- Qt::LeftButton ?標左鍵
- Qt::RightButton ?標右鍵
- Qt::MidButton ?標滾輪
- 鼠標釋放事件
?標釋放事件是通過虛函數 mouseReleaseEvent() 來捕獲的。mouseReleaseEvent() 函數原型如下
- 鼠標雙擊事件
?標雙擊事件是通過虛函數:mouseDoubleClickEvent()
來實現的。
- 鼠標移動事件
?標移動事件是通過虛函數:mouseMoveEvent()
來實現的。同時為了實時捕獲?標位置信息,需要通過函數 setMouseTracking()
來追蹤?標的位置
- 隨便移動一下鼠標,就會產生出大量的鼠標移動事件,當你進行捕獲事件的時候,尤其是在這里再進行一些復雜邏輯的時候,程序負擔就很重,很容易產生卡頓之類的情況。
- qt為了保證程序的流暢性,默認情況下不會對鼠標移動進行追蹤,鼠標移動的時候不會調用mouseMoveEvent。除非顯式告訴qt就要追蹤鼠標位置(即setMouseTracking() 設置為 true)。
- 鼠標滾輪事件
在 Qt 中,?標滾輪事件是通過 QWheelEvent
類來實現的。滾輪滑動的距離可以通過 delta()
函數獲取
其中返回值代表滾輪滑動的距離。正數表?滾輪相對于用戶向前滑動,負數表?滾輪相對于用戶向后滑動。
下面,我們實現一個Ctrl+鼠標滾動,調整字體大小的功能
4. 定時器
Qt 中在進?窗?程序的處理過程中,經常要周期性的執?某些操作,或者制作?些動畫效果,使?定時器就可以實現。
所謂定時器就是在間隔?定時間后,去執?某?個任務。定時器在很多場景下都會使?到,如彈窗?動關閉之類的功能等。
Qt中的定時器分為 QTimerEvent 和 QTimer 兩個類。
QTimerEvent
類用來描述?個定時器事件。在使用時需要通過startTimer()
函數來開啟?個定時器,這個函數需要輸??個以毫秒為單位的整數作為參數來表明設定的時間,它返回的整型值代表這個定時器。當定時器溢出時(即定時時間到達)就可以在timerEvent()
函數中獲取該定時器的編號來進?相關操作。QTimer
類 來實現?個定時器,它提供了更?層次的編程接?,如:可以使?信號和槽,還可以設置只運行?次的定時器。
- QTimerEvent 類
示例:在UI界?上放置兩個 Label 控件,?個讓其1秒數字累加一次,?個讓其2秒數字累加?次
- QTimer 類
通過QTimer與信號槽,實現按鈕點擊控制計時的效果。
在UI界?放置?個 Label 標簽,兩個按鈕,分別是 “開始” 和 “停止”,當點擊 “開始” 按鈕時,開始每隔1秒計數?次,點擊 “停?” 按鈕時,暫停計數。
- 獲取系統日期及時間
在 Qt 中,獲取系統的?期及實時時間可以通過 QTimer
類 和 QDateTime
類。
QDateTime類提供了字符串格式的時間。字符串形式的時間輸出格式由 toString() ?法中的 format 參數列表決定,可?的參數列表如下
5. 窗口事件
在 Qt 中,可以通過重寫 QWidget 的 moveEvent 和 resizeEvent 方法來處理窗口移動和調整大小的事件。這兩個事件分別在窗口位置改變和大小改變時被觸發。