以《c++ gui programming with qt 4, second edition》為參考
前幾節提到過訊號槽,此次來深入了解一下訊號槽機制。
訊號槽機制是qt的乙個基礎,它使得程式設計師把一些物件繫結在一起,而物件之間無需知道他們的詳細資訊。
槽類似於c++中的成員函式,可以是虛擬的,可被過載,可宣告為procted,private,public,可以像普通c++那樣呼叫,引數可以是任何型別等。而唯一的不同就是槽可以與訊號關聯。
當某個事件發生時,通過傳送訊號,將與之關聯的槽函式啟用,執行槽**。使用qobject::connect()將訊號與槽進行關聯。
connect()語句格式:
connect(sedner,signal(signal),receiver,slot(slot));
其中sender和receiver是qobject指標,signal和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.乙個訊號乙個槽
4.訊號與訊號:
connect(lineedit, signal(textchanged(const qstring &)), this, signal(updaterecord(const qstring &)));
當第乙個訊號傳送時第二個訊號也會傳送,除此之外與訊號槽是一樣的。
5.關聯可以移除:
disconnect(lcd, signal(overflow()), this, slot(handlematherror()));
通常這不是必須的,因為在物件刪除時qt會自動刪除物件中的所有連線。
注意事項:
1.訊號與槽的引數型別必須相同,而且順序要一致
connect(ftp, signal(rawcommandreply(int, const qstring &)), this, slot(processreply(int, const qstring &)));
2.如果訊號引數多於槽引數,那麼多餘的部分會忽略
connect(ftp, signal(rawcommandreply(int, const qstring &)), this, slot(checkerrorcode(int)));
3.如果引數型別不一致,那麼在編譯或執行時會報錯。
4.在類的開始加上q_object這個巨集,否則編譯會出錯。
QT學習筆記 5 訊號槽
模態對話方塊 相當於在已經開啟乙個對話方塊1的前提下,開啟對話方塊2,這時,是無法操作對話方塊1的。非模態對話方塊則相反。若要處理訊號的時候,記得在.pro檔案上面加上 config c 11模態對話方塊與非模態對話方塊的區別主要是在於 模態 qdialog dlg dlg.exec exec 執行...
Qt訊號槽機制
c 的rtti機制功能有限 qt提供了元物件系統,使用該系統的基類qobject所建立和派生的類,可以再執行期獲取該物件的類名 父 類名,成員變數資訊,成員函式資訊,進而實現訊號槽機制。c 模擬 類定義檔案 object.h 1.ifndef db object 2.define db object...
qt 訊號槽機制
訊號 signals void startgetdatathread void sendpointer mainwindow 宣告乙個訊號要使用signals關鍵字。在signals前面不能使用public private和protected等限定符,因為只有定義該訊號的類及其子類才可以發射該訊號。...