QT事件機制

2021-10-06 08:11:02 字數 798 閱讀 6172

qobject三大職責

任何乙個想要接受並處理事件的物件均須繼承自qobject,可以重寫qobject::event() 來處理事件,也可以由父類處理。

qt提供了5個級別來處理和過濾事件。

阻塞型事件:事件傳送後需要等待處理完成

sendevent

(qobject *receiver, qevent *event)

事件生命週期由應用程式自身管理,同時支援棧事件物件和堆事件物件的傳送。

非阻塞型傳送:事件傳送後立刻返回,事件被傳送到事件佇列等待處理

postevent

(qobject *receiver, qevent *event,

int priority = qt::normaleventpriority)

只能傳送堆事件物件,事件被處理後由qt平台銷毀。

對於某些會被**的事件, 包括: 滑鼠、滾輪、按鍵等事件。如果在整個事件的派發過程結束後還沒有被處理, 那麼這個事件將會向上**給它的父widget,直到最頂層視窗。

比如:事件可能最先傳送給qcheckbox, 如果qcheckbox沒有處理, 那麼由qgroupbox接著處理;如果qgroupbox仍然沒有處理, 再送到qdialog, 因為qdialog已經是最頂層widget, 所以如果qdialog再不處理, qevent將停止**。

如何終止事件傳遞?

另一種是呼叫qevent::accept() 或 qevent::ignore()對事件進行標識。前者用來告訴qt,事件處理函式「接收」了這個事件,不要再傳遞;後者則告訴qt,事件處理函式「忽略」了這個事件,需要繼續傳遞。

qt 事件機制

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

QT事件機制

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

qt事件機制

coffeegg qt事件機制 學習了一段時間的qt之後,發現qt的事件機制和其他語言的機制有些不同。qt除了能夠 通過訊號和槽機制來實現一些action動作之外,還可以用物件所帶的事件,或者使用者自 定義的事件來實現物件的一些行為處理。現在,我們從頭開始講解。到底什麼是事件呢?事件起源 基於事件如...