Qt事件系統研究

2021-08-02 09:32:23 字數 2064 閱讀 9914

qt中的事件

基本概念:

事件是對各種應用程式需要知道的由應用程式內部或者外部產生的事情或者動作的統稱。qt中使用乙個物件來表示乙個事件,這個物件繼承自qevent類。事件和訊號並非同一概念,在qt中,任何qobject子類例項都可以接受和處理事件。

qt事件處理過程中發生的傳遞類似於冒泡,如果在乙個窗體內沒有設定該事件屬性為true,則這個事件就會交給這個視窗的父部件去處理,如果這個事件的屬性仍然沒有被設定成為true,會繼續交給父部件處理,如此往復,一直到最後的基類qevent或者知道有乙個視窗去處理這個事件。

設定事件屬性的方式為,呼叫event->accept(),將其設定為true,不做處理則將event->ignore()設定為false

qevent

相關舉例

void qobject::installeventfilter ( const qobject * obj )

安裝事件過濾器obj到這個物件,乙個物件上安裝的事件過濾器物件能接收所有傳送到這個物件的事件。

事件過濾器就是接收所有被傳送到這個物件的事件的物件。這個過濾器可以停止事件或者把它再轉給這個物件。事件過濾器obj通過它的eventfilter()函式來接收事件。如果事件被過濾了(比如,停止了),eventfilter()函式必須返回真,否則它必須返回假

如果有多個事件過濾器被安裝到同乙個物件上,最後乙個被安裝的事件過濾器將先被啟用。舉例如下:

#include

class mywidget : public qwidget

;mywidget::mywidget( qwidget *

parent, const char *name )

: qwidget( parent, name )

bool mywidget::eventfilter( qobject *o, qevent *e )

else

}

例如,qaccel類使用這種技術來擷取快捷鍵被按下。

如果在你的eventfilter()函式中你刪除了接收物件,請確認返回真。否則,qt會把這個事件轉給被刪除的物件並且程式也許會崩潰。

bool

qobject

::eventfilter ( qobject * watched, qevent * e ) [虛函式]

注意:如果你想過濾出e事件,比如,停止它的進一步處理,返回真,否則返回假。

警告:如果你在這個函式中刪除接收物件,請確認返回真。否則,qt會把這個事件轉給被刪除的物件並且程式也許會崩潰。

eventfilter被執行的**

bool qobject::activate_filters( qevent *e )

obj = it.current();

}return

false; // don't do anything with it

}

signal與event的區別與聯絡

emit的是乙個signal,不是乙個event,

所謂的event一般是通過postevents()是會進入程序主迴圈的queue中的,是asynchronous,但是event也可sendevent()(這種用法是synchronous)

signal的發出者是物件;event的發出者一般來說是視窗系統。即在實現乙個元件的時候用事件,

例如qbutton裡,void clicked()是乙個訊號,它通過keypressevent與keyreleaseevent()來實現

responsive stay機制

DOS系統研究

這裡說的特指ms dos,一款由微軟從seattle computer products購買來的針對16位8086 8088系列處理器的作業系統。它隨著由16位的80x86處理器的桌面電腦的普及而成為曾經的主流作業系統,但是當更先進的處理器在桌面電腦中流行後,它的主流地位也讓位於其他更成熟的作業系統...

ACARS系統研究

1 概述 acars aircraftcommunication addressing reporting systems 飛機通訊定址報告系統,美國arinc公司開發,採用迴圈冗餘校驗碼 crc 進行校驗。航空器與地面站之間通過無線電或衛星傳輸短訊息 報文 的數字資料鏈系統。具有傳輸速度快 抗干擾...

Swift模組系統研究

explicit module b module curl system extern c 將此 module.map 檔案放入任意資料夾,通過 xcode 選項或者命令列引數,新增路徑到 import search path swift 的 i 引數 然後就可以在 swift 裡直接通過 impo...