Qt學習六 訊號與槽

2022-09-02 08:30:19 字數 1130 閱讀 3930

訊號和槽是qt的核心特徵。用於物件間的通訊,類似觀察者模式。例如當乙個按鈕被點選,按鈕監測到自己被點選了一下,就會傳送乙個訊號(signal)。這個訊號無目的,類似廣播。如果我們需要處理這個訊號,那麼就需要使用connect來連線乙個物件,使用該物件對應的槽函式(slot)來處理這個訊號。也就是說,當點選按鈕時,會觸發與之相關聯的槽函式。乙個訊號可以關聯多個槽函式,多個訊號也可以關聯到乙個槽函式上,甚至乙個訊號還可以關聯到另乙個訊號上。當訊號被發射時,這些關聯的槽會乙個接乙個的執行,但是執行順序是隨機的,無法指定執行順序。另外,槽函式的引數可以少於訊號的引數,但是不能多於訊號的引數。

1. 在mainwindow.h中宣告乙個私有變數label,和乙個槽

class mainwindow : public

qmainwindow

;

2.在mainwindow.cpp中

mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent),

ui(newui::mainwindow)

mainwindow::~mainwindow()

void

mainwindow::on_pushbutton_clicked()

執行程式,當點選按鈕後,label的顯示內容就發生了改變。

其實上面的例子裡,我們已經自定義了槽。自定義訊號也很簡單,只需要在傳送訊號的物件中宣告乙個訊號,不用實現。例如在mainwindow.h中新增如下**

signals:

void changelabeltxt();

這樣便在mainwindow中自定義了乙個訊號,然後在需要傳送的訊號的地方呼叫emit傳送即可。

emit changelabeltxt();

然後在接收訊號的物件中,呼叫connect函式連線槽。

自定義訊號槽有幾點需要注意:

必須繼承自qobject或其子類

在類宣告的最開始處新增q_object巨集

槽函式中的引數型別要與訊號中的引數型別相對應,且數量不能比訊號多。訊號的引數個數可以比槽多,多出來的會棄用

訊號只有宣告,沒有定義。返回值型別為void

QT學習 訊號與槽

最近在學習qt訊號與槽。先看看我自己寫的乙個demo.這個demo沒有窗體。在qt creator中新建乙個 空的qt專案 pro檔案如下 templateheaders mysignal.h myslot.hsources mysignal.cpp myslot.cpp main.cpp包含三個c...

qt 槽與訊號

槽就是乙個可以被呼叫處理特定訊號的函式 乙個小的qt類如下 class foo public qobject public slots void setvalue int signals void valuechanged int private int val qt中的元物件系統是用來處理物件間通...

QT訊號與槽

初學qt,覺得理解qt訊號與槽比較重要,qt很多時候都需要用到訊號和槽。發射訊號會觸發相對應的槽函式的執行。乙個訊號可以對應多個槽,多個訊號可以對應乙個槽。訊號和槽是通過connect這個方法進行建立聯絡的。qt中有些類會自帶有一些訊號和槽函式,當然訊號和槽函式也可以自己定義。下面來看下很簡單的 會...