訊號槽系統

2021-07-27 05:24:22 字數 1557 閱讀 4551

訊號槽:乙個物件(sender)上由於某件事情的發生而廣播乙個訊號(signal),通過connect函式進行連線,另乙個物件(receiver)可以接收這個訊號並呼叫乙個槽函式(slot)作為響應。

connect函式的基本形式:qobjectconnect(sender,signal,receiver,slot)

qt5中qobject : : connect()的五個過載如下:

(1)qmetaobject::connection connect(const qobject *, const char *,

const qobject *, const char *,

qt::connectiontype);

(2)qmetaobject::connection connect(const qobject *, const qmetamethod &,

const qobject *, const qmetamethod &,

qt::connectiontype);

(3)qmetaobject::connection connect(const qobject *, const char *,

const char *,

qt::connectiontype) const;

(4)qmetaobject::connection connect(const qobject *, pointertomemberfunction,

const qobject *, pointertomemberfunction,

qt::connectiontype)

(5)qmetaobject::connection connect(const qobject *, pointertomemberfunction,

functor);

以connect函式的基本形式分析以上五種過載:

1.對於第一二四種過載,sender和receiver都是qobject,區別在於訊號函式和槽函式有三種型別:const char *、qmetamethod &和pointertomemberfunction。

其中pointertomemberfunctio指的是訊號、槽函式的指標,比較容易理解。

const char*是字串,根據作者的解釋,使用signal(訊號函式名)和slot(槽函式名)的巨集,可以將其轉化為字串。

2.對於第三種過載,相較於第一種,缺少了receiver,此處預設將this指標當作receiver。

3.對於第五種過載,functor指的是static函式、全域性函式和lambda表示式(c++11)。

注意帶引數的訊號槽函式,實際上是訊號函式將引數傳給了槽函式,因此槽函式的引數數目不能夠多於訊號函式。

除了qt內建的元件已經實現的訊號,對於自定義類的自定義訊號槽使用如下:

1.sender類的public成員中,額外定義signals成員,signals成員的宣告方式等同於普通的函式,但是不需要也不能有具體的實現。

2.通常在sender類的其他成員函式中發射該訊號,語法為:emit 函式名。

3.通過connect進行連線工作。

關於lambda表示式:

C 資訊槽 訊號槽

訊號槽作用 1 可以將事件源和訂閱處理者分開 2 降低耦合性,事件源只需要向外界暴露最少的資訊,內部改變不影響外部行為 3.降低 複雜性,將事件不同的處理 分散到各個訂閱者內部。使用資訊槽 1 包含標頭檔案,include sigslot.h using namespace sigslot 2 在事...

訊號槽QT中訊號和槽淺淺淡淡

時間緊張,先記一筆,後續優化與完善。全部從 qobject 或其子類 例如 qwidget 派生的類都夠能包括訊號和槽。當物件變改其態狀時,訊號就由該物件發射 emit 出去,這就是物件所要做的部全情事,它不曉得另一端是誰在接收這個訊號。這就是真正的資訊封裝,它確保物件被作當乙個真正的軟體元件來應用...

qt 槽與訊號

槽就是乙個可以被呼叫處理特定訊號的函式 乙個小的qt類如下 class foo public qobject public slots void setvalue int signals void valuechanged int private int val qt中的元物件系統是用來處理物件間通...