Qt事件系統基本概念

2022-08-20 22:06:10 字數 1383 閱讀 1463

**自:

1. qt事件系統

qt應用程式的訊息處理是基於事件驅動的,程式的每個動作都是由某個事件所觸發的,例如:滑鼠動作觸發qmouseevent,鍵盤操作觸發qkeyevent等,所有這些事件都派生於qevent,具體事件的路由是通過qobject::event()來實現的。

事件一般被劃分為兩類

1) 系統事件,比如滑鼠,鍵盤的操作,這些事件由系統捕獲然後被插隊到系統訊息佇列中,qt應用程式通過事件迴圈從系統訊息中讀取訊息(事件)然後用qevent進行訊息(事件)封裝,接下來就是對qevent的依次處理了.

2) 自發事件,主要由qt程式自己產生,然後通過postevent或者sendevent將事件傳送到目標物件上或者訊息佇列中,類似vc中自定義事件,通過posemessage和sendmessage進行訊息的傳送。 在qt系統中通過postevent傳遞的事件將被送入到訊息佇列中,然後由訊息迴圈讀取訊息,一次處理,通過sendevent傳送的事件將直接被傳送到目標物件執行,不要進行事件的排隊處理.

qt系統定義的事件型別比較多,像我們常用的有:

鍵盤事件(press/release) , 滑鼠事件(press,release,move,double click等),拖放事件(drag ,drop) , 繪屏事件(paint),焦點事件(focus),大小改變事件(resize)等等

每個事件型別都有對應的事件類對該事件相關聯的的資訊進行封裝,例如滑鼠事件qmouseevent,該類記錄了當前滑鼠的位置以及以及滑鼠按鍵的資訊, 鍵盤事件qkeypressevent類記錄了按下鍵資訊.

2.事件的傳送

在1在提到程式自發型別事件時候,我們說過posetevent和sendevent,該兩個方法就是應用於qt系統中事件的傳送。

sendevent方法是直接將是直接將事件傳送到目標物件上的,所以當目標收到事件後是直接執行的。

postevent方法並不是直接投遞事件到物件上,而是通過將事件投遞到訊息佇列中,然後由訊息迴圈從佇列中讀取事件,依次處理的 。

3.事件的處理

在qt中對事件的處理有很多種方式

1) 直接有對應事件處理方法進行處理,例如:滑鼠移動事件有mousemoveevent處理,鍵盤按下事件由keypressevent處理,每個事件都有特定的方法用於處理該事件.

2)  event()處理,在qt系統中事件的處理都是通過event()進行分發的,所以在事件落實到具體的物件和特定的方法時候,都是要通過event(),所以如果要攔截某個訊息可以通過過載event實現

3) notify()處理,notify用於事件的過濾和合併,最後實現事件的分布,有點類似event()

4)事件過濾,事件過濾的主要是用於在事件被投遞到特定的處理方法時候,捕獲事件,並作相應處理,事件過濾也實現讓乙個物件可以對另乙個物件事件的監控,並在事件被處理前進行預處理操作.

js事件基本概念

1.事件模型 2.事件流 概念 事件流指的是事件從捕獲 處於目標 事件冒泡三個階段 3.dom的三個階段?dom0 事件的新增用onclick新增。dom2 事件的新增用addevenlistener type.function buhuo 並且可以新增多個事件,this 當前的物件。ie瀏覽器是通...

基本概念 數控系統基本概念

第一章 基本概念 數控工具機cnc是一種按事先編制好的加工零件程式進行加工的高效 自動化加工裝置。是 computer numerical control machine tools 的簡稱。數控工具機較好地解決了複雜 精密 小批量 多品種的零件加工問題,是一種柔性的 高效能的自動化工具機。西門子系...

推薦系統 基本概念

序 帕洛阿爾托研究中心的tapestry系統 goldberg et al.1992 引入了協同過濾的思想和概念,展示了如何將顯示標註資料和隱式行為資料注入可查詢的資料庫中,以及使用者如何利用這些資料進行個性化過濾。grouplens系統 resnick et al.1994 展示了協同過濾方法既能...