QT的訊號與槽機制介紹(3)

2021-06-02 13:20:52 字數 2038 閱讀 8108

六、程式樣例

這裡給出了乙個簡單的樣例程式,程式中定義了三個訊號、三個槽函式,然後將訊號與槽進行了關聯,每個槽函式只是簡單的彈出乙個對話方塊視窗。讀者可以用kdevelop生成乙個簡單的qt應用程式,然後將下面的**新增到相應的程式中去。

訊號和槽函式的宣告一般位於標頭檔案中,同時在類宣告的開始位置必須加上q_object語句,這條語句是不可缺少的,它將告訴編譯器在編譯之前必須先應用moc工具進行擴充套件。關鍵字signals指出隨後開始訊號的宣告,這裡signals用的是複數形式而非單數,siganls沒有public、private、protected等屬性,這點不同於slots。另外,signals、slots關鍵字是qt自己定義的,不是c++中的關鍵字。

訊號的宣告類似於函式的宣告而非變數的宣告,左邊要有型別,右邊要有括號,如果要向槽中傳遞引數的話,在括號中指定每個形式引數的型別,當然,形式引數的個數可以多於乙個。

關鍵字slots指出隨後開始槽的宣告,這裡slots用的也是複數形式。

槽的宣告與普通函式的宣告一樣,可以攜帶零或多個形式引數。既然訊號的宣告類似於普通c++函式的宣告,那麼,訊號也可採用c++中虛函式的形式進行宣告,即同名但引數不同。例如,第一次定義的void mysignal()沒有帶引數,而第二次定義的卻帶有引數,從這裡我們可以看到qt的訊號機制是非常靈活的。

訊號與槽之間的聯絡必須事先用connect函式進行指定。如果要斷開二者之間的聯絡,可以使用函式disconnect。

q_object

//訊號宣告區

signals:

//宣告訊號mysignal()

void mysignal();

//宣告訊號mysignal(int)

void mysignal(int x);

//宣告訊號mysignalparam(int,int)

void mysignalparam(int x,int y);

//槽宣告區

public slots:

//宣告槽函式myslot()

void myslot();

//宣告槽函式myslot(int)

void myslot(int x);

//宣告槽函式mysignalparam (int,int)

void mysignalparam(int x,int y);

//將訊號mysignal()與槽myslot()相關聯

connect(this,signal(mysignal()),slot(myslot()));

//將訊號mysignal(int)與槽myslot(int)相關聯

connect(this,signal(mysignal(int)),slot(myslot(int)));

//將訊號mysignalparam(int,int)與槽myslotparam(int,int)相關聯

connect(this,signal(mysignalparam(int,int)),slot(myslotparam(int,int)));

// 定義槽函式myslot()

qmessagebox::about(this,"tsignal", "this is a signal/slot sample without

parameter.");

// 定義槽函式myslot(int)

qmessagebox::about(this,"tsignal", "this is a signal/slot sample with

oneparameter.");

// 定義槽函式myslotparam(int,int)

char s[256];

sprintf(s,"x:%d y:%d",x,y);

qmessagebox::about(this,"tsignal", s);

//發射訊號mysignal()

emit mysignal();

//發射訊號mysignal(int)

emit mysignal(5);

//發射訊號mysignalparam(5,100)

emit mysignalparam(5,100);

QT訊號與槽機制

qt訊號與槽 posted on 2010 04 08 15 37 feisky 訊號與槽作為qt的核心機制在qt程式設計中有著廣泛的應用,本文介紹了訊號與槽的一些基本概念 元物件工具以及在實際使用過程中應注意的一些問題。qt是乙個跨平台的c gui應用構架,它提供了豐富的視窗部件集,具有物件導向 ...

Qt 訊號與槽機制

下部分 來自於我自己新增了傳遞引數的部分 ifndef my object define my object include define my slots define my signals protected define my emit class myobject struct metaob...

Qt的訊號與槽機制

qt使用訊號與槽機制進行物件間的通訊。當某個物件的狀態發生變化時,該物件會觸發 乙個訊號。該訊號和另外一些物件的槽函式繫結,訊號的觸發將導致執行這些槽函式,這些 槽函式將處理第乙個物件狀態的變化,完成物件之間的通訊。a 訊號與槽的定義 a 乙個類的訊號函式應該滿足以下語法約束。1 函式返回值是voi...