1. 程式人生 > >Qt中的鼠標事件

Qt中的鼠標事件

及其 分享 必須 不能 幫助文檔 描述 應用程序 平臺 發送

1、圖形界面應用程序的消息處理模型 技術分享 技術分享 特點:
  • 基於操作系統才能運行
  • GUI應用程序提供的功能必須由用戶觸發
  • 用戶操作界面時操作系統是第一個感知的
  • 系統內核的消息通過事件處理轉變成QT的信2、Qt中的事件處理
(1)Qt平臺將系統產生的消息轉變成Qt事件
  • Qt事件是一個QEvent(或子類)對象
  • 有時一個事件包含多個事件類型,比如鼠標事件又可以分為鼠標按下雙擊、和移動多種操作
  • 事件類型由QEvent類的枚舉型QEvent::Type來表示,可由幫助文檔進行查詢
  • Qt事件用於描述程序內部或外部發生的對應動作描述的是操作系統發生來的消息,一個系統消息對應著一個消息事件
  • 任意QObject對象
    都具備時間處理的能力

技術分享

QEvent及其子類對象

note:QEvent子類可以表示一個事件,但並不能處理這個事件

Qt 程序需要在main()函數創建一個QApplication對象,然後調用它的exec()函數。這個函數就是開始 Qt 的事件循環。在執行exec()函數之後,程序將進入事件循環來監聽應用程序的事件。當事件發生時,Qt 將創建一個事件對象。Qt 中所有事件類都繼承於QEvent。在事件對象創建完畢後,Qt 將這個事件對象傳遞給QObject的event()函數。event()函數並不直接處理事件,而是將這些事件對象按照它們不同的類型,分發給不同的事件處理器(event handler)。如上所述,event()函數主要用於事件的分發

(2)GUI應用程序的事件處理方式
  • Qt事件產生後會立即被分發到QWidget對象(QObject的子類)
  • QWidget對象其內部會有一個event(QEVent*)函數被調用,進行事件處理
  • event()根據事件類型調用不同的事件處理函數(默認的子函數)
  • 在事件處理函數中發送Qt中預定義的信號
  • 調用信號關聯的槽函數

(3) QPushButton事件處理分析技術分享

①接收到鼠標事件

②QApplication調用QObject::event(QEvent*)成員函數來處理,進行事件的分派。

③調用mouseReleaseEvent(QMouseEvent*)成員函數

④QPushButton調用click()成員函數

⑤觸發信號SIGNAL(clicked())

技術分享

Qt中的鼠標事件