Qt學習筆記5 訊號槽機制

2021-07-02 14:09:24 字數 1683 閱讀 6179

以《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等限定符,因為只有定義該訊號的類及其子類才可以發射該訊號。...