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