QT中的事件2

2021-06-16 04:53:32 字數 1872 閱讀 2004

qevent

void qobject::installeventfilter ( const qobject * 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 ) [虛函式] 

如果這個物件已經被安裝為watched物件的乙個事件過濾器,就過濾事件。 

在這個函式你的重新實現中,如果你想過濾出e事件,比如,停止它的進一步處理,返回真,否則返回假。

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

也可以參考installeventfilter()。

在qaccel、qscrollview和qspinbox中被重新實現。

eventfilter被執行的**

/*!/internal

activates all event filters for this object.

this function is normally called from qobject::event() or qwidget::event().*/

bool qobject::activate_filters( qevent *e )

obj = it.current();

}return false;    // don't do anything with it}

signal與event

emit的是乙個signal,不是乙個event,signal本質上是乙個callback,是synchronous;

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

signal的發出者是物件;event的發出者一般來說是視窗系統。

signals are useful when using a widget, whereas events are useful when implementing a widget. 即在實現乙個元件的時候用事件,

例如qbutton裡

void clicked()是乙個訊號,它通過keypressevent與keyreleaseevent()來實現。

responsive stay機制

本文**:

QT中的事件機制

什麼是自發事件?哪些型別的事件可以被propagated 或compressed?posting and sending 事件之間有何不同?什麼時候應該呼叫 accept 或是ignore 如果這些問題你還不是很了解,那麼繼續看下去。事件起源 定製事件型別 到現在為至,我們所說的內容不僅僅適用於ke...

Qt中的事件機制

什麼是自發事件?哪些型別的事件可以被propagated 或compressed?posting and sending 事件之間有何不同?什麼時候應該呼叫 accept 或是ignore 如果這些問題你還不是很了解,那麼繼續看下去。事件起源 定製事件型別 到現在為至,我們所說的內容不僅僅適用於ke...

Qt中的事件處理 相應

qt事件處理順尋 qt提供了五種不同級別的事件處理和過濾 a 重寫特定事件處理函式.最常見的事件處理辦法就是重寫mousepressevent keypressevent paintevent 等特定事件處理函式。b 重寫event 函式.重寫event 函式時,需要呼叫父類的event 函式來處理...