QT入門之訊號與槽

2021-10-02 21:57:13 字數 2158 閱讀 9143

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

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

connect(sender, signal(signal()), receiver, slog(slot()));
乙個訊號可以連線多個槽,槽函式按照建立連線時的順序一次執行。當訊號與槽函式帶有引數時,在connect()函式裡,可以不謝引數名稱,但要寫明引數型別。

多個訊號可以連線同乙個槽。

乙個訊號可以連線另外乙個訊號。

嚴格情況下,訊號與槽的引數個數和型別需要一致,至少訊號的引數不能少於槽的引數。

在使用訊號與槽的類中,必須在類的定義中加入 q_object。

當乙個訊號被發射後,與其關聯的槽函式通常立即被執行,就像正常呼叫乙個函式一樣。只有訊號關聯的所有槽函式執行完畢後,才會執行發射訊號處後面的**。

例子:實現如下圖所示功能

選中元件,右鍵單擊『go to slot...『之後:

qwdialog.h中:

#ifndef qwdialog_h

#define qwdialog_h

#include namespace ui

class qwdialog : public qdialog

;#endif // qwdialog_h

qwdialog.cpp:

#include "qwdialog.h"

#include "ui_qwdialog.h"

qwdialog::qwdialog(qwidget *parent) :

qdialog(parent),

ui(new ui::qwdialog)

qwdialog::~qwdialog()

//設定下劃線槽函式

void qwdialog::on_chk*****der_clicked(bool checked)

//設定斜體槽函式

void qwdialog::on_chkboxitalic_clicked(bool checked)

//設定粗體槽函式

void qwdialog::on_chkboxblod_clicked(bool checked)

//設定字型顏色槽函式

void qwdialog::settextfontcolor()

這裡沒有發現用 connect()函式進行幾個 checkbox 的訊號與槽函式關聯的操作。這些功能是如何實現的呢?

檢視編譯生成的 ui_qwdialog.h 檔案。建構函式裡呼叫的 setupui() 是在 ui_qwdialog.h 中實現的。檢視 setupui() 函式的內容,也沒有發現用 connect() 函式進行幾個 checkbox 訊號與槽的關聯的操作。秘密就在於:

qmetaobject::connectslotsbyname(qwdialog);
connectslotsbyname(qwdialog) 函式將搜尋qwdialog 介面上的所有元件,將訊號與槽函式匹配的訊號和槽關聯起來,它假設槽函式的名稱是:

void on__();
例如,通過ui設計器的操作,為chk*****der 的自動生成的槽函式是:

void on_chk*****der_clicked(bool checked);
它就正好是 chk*****der 的訊號 clicked(bool) 的槽函式。那麼,connectslotsbyname 就會將此訊號與槽函式關聯起來,如同執行了下面語句:

connect(chk*****der, signal(clicked(bool)), this, slot(on_chk*****der_clicked(bool));

Qt入門之訊號與槽機制

就我個人來理解,訊號槽機制與windows下訊息機制類似,訊息機制是基於 函式,qt中用訊號與槽來代替函式指標,使程式更安全簡潔。訊號和槽機制是 qt 的核心機制,可以讓程式設計人員將互不相關的物件繫結在一起,實現物件之間的通訊。connect sender,signal signal receiv...

QT之訊號與槽

當乙個物件的狀態發生變化時,通過訊號的方式通知其他物件,其他物件通過執行相應的槽函式來響應該訊號。訊號與槽是qt提供的任意兩個 qobject 物件之間的通訊機制,常用來完成介面操作的響應。訊號 訊號 是可以看作是乙個請求或者乙個動作的標誌。訊號的理解 1 訊號是屬於物件的 2 當物件的狀態改變時,...

QT之訊號與槽基礎

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