Qt之事件系統 實踐篇

2021-10-02 16:26:00 字數 2918 閱讀 2703

事件過濾器

自定義事件:

事件迴圈

本篇主要敘述qt中的事件系統,在實際開發工程中所用到的經驗。

如果對qt事件理論知識不懂,訪問

}return qobject::eventfilter(obj, event); //其他的預設呼叫父類的方法

}return qobject::eventfilter(obj, event); //其他的預設呼叫父類的方法

這兩種情況比較:

事件先經過事件過濾器,再經過槽函式;

事件過濾器返回false, 會繼續傳播到槽函式;

事件過濾器返回true,不會繼續,槽函式不會執行;

1.訊號槽是一對一的,當要在多個地方響應同乙個訊號的時候,使用訊號槽會顯得臃腫。

首先自定義事件類

customevent.h

#ifndef customevent_h

#define customevent_h

#include #include #include //事件型別

enum ecustomeventtype;

class customevent : public qevent

;#endif // customevent_h

customevent.cpp

#include "customevent.h"

customevent::customevent(ecustomeventtype type,

qvariant par1,

qvariant par2,

qvariant par3,

qvariant par4,

qvariant par5,

qvariant par6,

qvariant par7

): qevent(type(type) ),

m_par1(par1),

m_par2(par2),

m_par3(par3),

m_par4(par4),

m_par5(par5),

m_par6(par6),

m_par7(par7)

widget.cpp

//自定義事件

//傳送事件

void widget::posteventtoobj(ecustomeventtype etype,

qvariant par1, qvariant par2)

//接收事件

bool widget::event(qevent *ev)

break;

case etest2: //etest2

break;

default:

break;

}return qwidget::event(ev); //呼叫預設父類函式

}

呼叫:

//http get請求

因為請求的過程是非同步的,所以此時使用 qeventloop 開啟乙個區域性的事件迴圈,等待響應結束,事件迴圈退出。

**注意:**開啟事件迴圈的同時,程式介面將不會響應使用者操作(介面被阻塞)。

//processevents()處理密集操作介面響應

void widget::on_pushbutton_4_clicked()

}

執行後,我們一直點介面,就會出現如下情形,介面卡死狀態;

如何解決哪?

放開即可

Qt之事件系統

乙個事件有兩個資訊 誰的事件和什麼事件。在不使用事件過濾器的情況下,應用程式會直接將事件傳送給對應的控制項物件,由對應的控制項物件自己去處理,但是如果使用了事件過濾器,應用程式會將控制項的事件首先發給事件過濾器,但這前提是那個控制項安裝了事件過濾器,這樣應用程式才知道它需要被監控,才會把它的事件先傳...

Qt之事件處理機制

qt程式是事件驅動的,程式的每個動作都是由內部某個事件所觸發。qt事件的發生和處理成為程式執行的主線,存在於程式整個生命週期。常見的qt事件型別如下 鍵盤事件 按鍵按下和鬆開 滑鼠事件 滑鼠移動,滑鼠按鍵的按下和鬆開 拖放事件 用滑鼠進行拖放 滾輪事件 滑鼠滾輪滾動 繪屏事件 重繪螢幕的某些部分 定...

Qt事件系統

在qt中,事件是繼承了虛擬類qevent 的物件,它代表了程式所發生的事情或者程式需要知道的乙個外部活動的結果。事件可以被任意 qobject 子類的例項接收和處理,是與widgets 當發生乙個事件,qt通過構造乙個適當的 qevent 子類的例項來建立事件物件來代表它,並通過呼叫vevent 函...