Qt入門之訊號與槽機制

2022-03-10 16:18:51 字數 1380 閱讀 4244

就我個人來理解,訊號槽機制與windows下訊息機制類似,訊息機制是基於**函式,qt中用訊號與槽來代替函式指標,使程式更安全簡潔。

訊號和槽機制是 qt 的核心機制,可以讓程式設計人員將互不相關的物件繫結在一起,實現物件之間的通訊。

connect(sender, signal(signal), receiver, slot(slot));
其中 sender 與 receiver 是指向物件的指標,signal() 與 slot() 是轉換訊號與槽的巨集。

disconnect(sender, signal(signal), receiver, slot(slot));
訊號與槽機制與普通函式的呼叫一樣,如果使用不當的話,在程式執行時也有可能產生死迴圈。因此,在定義槽函式時一定要注意避免間接形成無限迴圈,即在槽中再次發射所接收到的同樣訊號。例如 , 在前面給出的例子中如果在 myslot() 槽函式中加上語句 emit mysignal() 即可形成死迴圈。

如果乙個訊號與多個槽相聯絡的話,那麼,當這個訊號被發射時,與之相關的槽被啟用的順序將是隨機的。

巨集定義不能用在 signal 和 slot 的引數中。

訊號和槽的引數個數與型別必須一致。

這個demo程式由乙個label和pushbutton組成,第乙個例子中點選按鈕,可以讓label關閉,這是最簡單的訊號與槽的連線;第二例子中點選按鈕,在label上獲取當前系統時間,這個涉及到的知識點有:訊號與槽的引數型別不同時如何連線、自定義槽函式、自定義訊號。

首先,新建乙個qt gui程式,父視窗選為qdialog,類名為gettime,在標頭檔案和cpp檔案分別加入如下**(小生愚鈍,還沒弄清楚markdown**塊怎麼高亮,所以只好貼截圖了,見諒

標頭檔案

實現檔案

儲存、編譯、執行之後點選按鈕即可看到label消失了。

然後在標頭檔案中加入自定義的槽函式和訊號,並在cpp檔案中實現槽函式,具體如下:

標頭檔案

實現檔案

然後儲存,編譯執行即可,點選按鈕後就能看到label上顯示當前時間了。

QT入門之訊號與槽

訊號與槽的關聯使用 qobject connect 函式實現的,其基本格式是 qobject connect sender,signal signal receiver,slog slot connect 是 qobject類的乙個靜態函式,而qobject是所有qt類的基類,在實際呼叫時可以忽略前...

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...