訊號和槽機制是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...