Qt中訊號與事件的小結
阿新 • • 發佈:2019-02-08
這幾天在使用Qt的時候,遇到一些關於訊號、事件的一些問題。發現對訊號,事件的區別不是很瞭解。於是上網找了一些資料,做了一點筆記總結下,方便自己也方便他人。要是有不對的地方,還望大家指出,大家一起進步
訊號:
訊號不是事件,訊號的本質是回撥函式,在一個執行緒中可看做是同步操作
同時訊號的發出者是物件,訊號不會迴圈,接收者會立即收到;
訊號的返回值無意義!
事件:
事件一般是通過postEvent()函式進入到程序主迴圈事件佇列中,是非同步操作
事件的發出者一般是視窗系統,少數來自系統的內部;
事件回撥時都是以當前視窗開始,一級一級向上派發,直到有一個視窗返回true,截斷事件處理中心;
事件根據返回值判斷事件是否被處理!
注意:
1、訊號有具體的物件發出,然後馬上交給connect()函式連線的槽進行處理,而對於事件,Qt使用一個佇列事件對所有的事件進行維護,當新的事件產生時,會被追加到事件佇列的尾部。
2、訊號一旦發出,槽函式一定會執行,事件可以用過濾器過濾.
3、訊號與槽中,傳送者所在的執行緒是無關緊要的。在自動連線情況下,Qt需要檢視訊號發出的執行緒是不是和訊號接收者的執行緒一致,來決定連線的型別!
是 按時打算大聲道sa 是d