Boost庫訊號槽機制的簡單使用

2021-10-05 05:59:04 字數 1468 閱讀 3450

安裝命令sudo apt-get install libboost-dev
首先我們在sig.h裡面定義兩個訊號

#define _sig_h_

#include

#include

using

namespace std;

using

namespace boost::signals2;

//訊號的定義

//注意!signal裡面的引數要和呼叫的函式的形參和返回值型別對應上,不然就會報錯

signal<

string()

> sig1;

signal<

int(

int)

> sig2;

#endif

然後我們在另乙個.cpp檔案裡寫幾個槽函式

#include

"sig.h"

/*signals2基於boost裡另乙個庫signals實現了執行緒安全的觀察者模式。

signal中乙個比較重要的操作函式是connect,它把插槽連線到訊號上;

插槽可以是任意可呼叫物件,包括函式指標、函式物件,以及他們的bind/lambda函式。

connect函式將返回乙個connection物件,表示了訊號和插槽之間的連線關係,

connection物件可以更靈活的處理訊號與槽函式的連線、斷開等關係。*/

//普通槽函式

string slot_first()

string slot_second()

intslot_third

(int x)

intmain

(int argc,

char

const

*ar**)

);sig2

(666);

//對於訊號的呼叫的話注意形參要傳對型別哦

system

("pause");

return0;

}

讓我們來分析一下結果吧

slot 1 called!

slot 2 called!

====

====

====

*****==

//很明顯的差別發現繫結了順序了之後,第一次slot1先呼叫,slot2在第二次會先呼叫

slot 2 called!

slot 1 called!

slot 1 called!

slot 2 called!

====

====

====

*****==

slot third called!

lambda called!

//這裡lambda函式呼叫之後就釋放了,非常節約資源大家趕緊再專案中靈活運用起來吧!

訊號和槽的機制

一.介紹 gui應用程式是事件驅動的。事件主要由應用程式的使用者生成。但它們也可以通過其他手段產生,例如 網路連線,視窗 管理器或定時器。當我們呼叫應用程式的exec 方法時,應用程式進入主迴圈。主迴圈獲取事件並將其傳送到物件。在事件模型中,有三個參與者 事件源是其狀態更改的物件。它會生成事件。事件...

Qt訊號槽連線函式connect 的簡單使用方法

connect b2,qpushbutton released,this,mainwidget myslot 抬起 按鈕b2時,修改按鈕b2的標題 connect b4,qpushbutton released,b4 mutable 在此處新增mutable關鍵字,代表傳進來的變數可以被修改,不寫該...

Qt訊號槽機制的實現

因為面試時問了我這道題,導致我想去了解訊號槽到底是如何實現的,於是貼著順序看了下原始碼,大致了解了整個框架。網上關於訊號槽的文章也很多,但是大部分都是將如何應用的,這裡我就寫一下我所理解的如何實現吧,由於時間倉促,原始碼閱讀的也不甚仔細,難免導致最終理解有偏差或錯誤,大家看出了請一定指正。首先 訊號...