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 函式來處理...