Qt訊號與槽機制詳解

2021-10-01 12:16:28 字數 1268 閱讀 3198

訊號與槽(signal & slot)是 qt 程式設計的基礎,也是 qt 的一大創新。因為有了訊號與槽的程式設計機制,在 qt 中處理介面各個元件的互動操作時變得更加直觀和簡單。

訊號(signal)就是在特定情況下被發射的事件,例如pushbutton 最常見的訊號就是滑鼠單擊時發射的 clicked() 訊號,乙個 combobox 最常見的訊號是選擇的列表項變化時發射的 currentindexchanged() 訊號。

gui 程式設計的主要內容就是對介面上各元件的訊號的響應,只需要知道什麼情況下發射哪些訊號,合理地去響應和處理這些訊號就可以了。

槽(slot)就是對訊號響應的函式。槽就是乙個函式,與一般的c++函式是一樣的,可以定義在類的任何部分(public、private 或 protected),可以具有任何引數,也可以被直接呼叫。槽函式與一般的函式不同的是:槽函式可以與乙個訊號關聯,當訊號被發射時,關聯的槽函式被自動執行。

訊號與槽關聯是用 qobject::connect() 函式實現的,其基本格式是:

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

connect() 是 qobject 類的乙個靜態函式,而 qobject 是所有 qt 類的基類,在實際呼叫時可以忽略前面的限定符,所以可以直接寫為:

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

其中,sender 是發射訊號的物件的名稱,signal() 是訊號名稱。訊號可以看做是特殊的函式,需要帶括號,有引數時還需要指明引數。receiver 是接收訊號的物件名稱,slot() 是槽函式的名稱,需要帶括號,有引數時還需要指明引數。

signal 和 slot 是 qt 的巨集,用於指明訊號和槽,並將它們的引數轉換為相應的字串。例如,在 samp2_1(前面章節中的專案)的 ui_widget.h 檔案中,在 setupui() 函式中有如下的語句:

qobject::connect(btnclose, signal(clicked()), widget, slot(close()));

其作用就是將 btnclose 按鈕的 clicked() 訊號與窗體(widget)的槽函式 close() 相關聯,這樣,當單擊 btnclose 按鈕(就是介面上的「close」按鈕)時,就會執行 widget 的 close() 槽函式。

關於訊號與槽的使用,有以下一些規則需要注意:

訊號與槽機制是 qt gui 程式設計的基礎,使用訊號與槽機制可以比較容易地將訊號與響應**關聯起來。

Qt訊號與槽機制詳解

訊號與槽 signal slot 是 qt 程式設計的基礎,也是 qt 的一大創新。因為有了訊號與槽的程式設計機制,在 qt 中處理介面各個元件的互動操作時變得更加直觀和簡單。訊號 signal 就是在特定情況下被發射的事件,例如pushbutton 最常見的訊號就是滑鼠單擊時發射的 clicked...

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