Qt中深入介紹訊號和槽

2021-10-01 09:26:45 字數 1600 閱讀 6465

訊號和槽機制是qt程式設計的基礎。槽和普通的c++成員函式幾乎是一樣的----它們可以是虛函式(virtual),也可被過載(overload),可以是公有的(public),保護的(protective),也可是私有的(private),它們可以象任何 c++成員函式一樣被呼叫,可以傳遞任何型別的引數。唯一不同在於,槽函式能和乙個訊號相連線,這種情況下,只要訊號發出了,這個槽函式就會自動被呼叫。

connect 函式語法如下:

connect(sender, signal(signal), receiver, slot(slot));

sender 和 receiver 是 指向qobject 的指標,signal 和 slot 是不帶引數的函式名。

實際上signale()和 slot()巨集會把他們的引數轉換成相應的字串。

這裡我們還需考慮其他的可能性:

1、乙個訊號可以連線到多個槽:

connect(slider, signal(valuechanged(int)),spinbox, slot(setvalue(int)));

connect(slider, signal(valuechanged(int)),this,

slot(updatestatusbarindicator(int)));

當訊號發出後,槽函式都會被呼叫,但是呼叫的順序是隨機的,不確定的。

2、多個訊號可以連線到乙個槽

connect(lcd, signal(overflow()), this, slot(handlematherror()));

connect(calculator, signal(divisionbyzero()),this, slot(handlematherror()));

任何乙個訊號發出,槽函式都會執行。

3、乙個訊號可以和另乙個訊號相連

connect(lineedit, signal(textchanged(const qstring &)),

this, signal(updaterecord(const qstring &)));

第乙個訊號發出後,第二個訊號也同時傳送。除此之外,訊號與訊號連線上和訊號和槽連

接相同。

4、連線可以被刪除

disconnect(lcd, signal(overflow()),this, slot(handlematherror()));

這個函式很少使用,乙個物件刪除後,qt 自動刪除這個物件的所有連線。

訊號和槽函式必須有著相同的引數型別,這樣訊號和槽函式才能成功連線:

connect(ftp, signal(rawcommandreply(int, const qstring &)),this,

slot(processreply(int, const qstring &)));

如果訊號裡的引數個數多於槽函式的引數,多餘的引數被忽略:

connect(ftp, signal(rawcommandreply(int, const qstring &)),this,

slot(checkerrorcode(int)));

如果參速型別不匹配,或者訊號和槽不存在,在 debug 狀態時,qt 會在執行期間給出

警告。如果訊號和槽連線時包含了引數的名字,qt 將會給出警告。

第四講 深入介紹訊號與槽

本文概要 講解qt的訊號與槽機制,涉及訊號與槽的連線方法,連線條件等。可以使用訊號與槽機制的類 訊號與槽機制是在qobject類中實現的,這種機制能夠用與任何qobject子類中,但是應該在類 中加入q object巨集。槽的介紹 槽與普通的c 成員函式幾乎一樣 槽能夠被宣告為虛函式,能被過載,能夠...

Qt 之路 09 深入訊號和槽

訊號槽機制是qt程式設計的基礎。通過訊號槽,能夠使qt各元件在不知道對方的情形下能夠相互通訊。這就將類之間的關係做了最大程度的解耦。槽函式和普通的c 成員函式沒有很大的區別。它們也可以使virtual的 可以被重寫 可以使public protected或者private的 可以由其它的c 函式呼叫...

第二章 建立對話方塊 2 2深入介紹訊號和槽

訊號和槽機制是qt程式設計的基礎,可以程式設計師把互不了解的物件繫結在一起。槽和普通的c 成員函式幾乎是一樣的,但唯一的不用是 槽還可以跟訊號連線在一起。每當發射訊號就會自動呼叫這個槽。connect的語句看起來這樣的 connect sender,signal signal receiver,sl...