第二章 建立對話方塊 2 2深入介紹訊號和槽

2021-06-21 13:53:10 字數 1221 閱讀 5438

訊號和槽機制是qt程式設計的基礎,可以程式設計師把互不了解的物件繫結在一起。

槽和普通的c++成員函式幾乎是一樣的,,但唯一的不用是:槽還可以跟訊號連線在一起。每當發射訊號就會自動呼叫這個槽。

connect的語句看起來這樣的:

connect(sender,signal(signal)),receiver,slot(slot));
sender  , receive是指向qobject的指標,signal 和 slot 是不帶引數名(書上是引數,我認識說是引數名更確切)的函式名,實際上signl()和slot()巨集會把它們的引數轉化成相應的字串。

除了乙個訊號連線乙個槽,還可以有其他的可能性

1.乙個訊號連線多個槽   發射這個訊號的時候,以不確定順序乙個接乙個呼叫這些槽

2.多個訊號連線同乙個槽, 無論哪個訊號都可以呼叫槽

3.乙個訊號和另外乙個訊號連線,  發射第乙個訊號也會發射第二個訊號, 它們的連線和訊號和槽的連線難以區別

4.連線可以被移除

diconnect   

但這種情況較少用到。因為刪除物件的時候qt自動移除和這個物件相關的所有連線

要是訊號和槽成功連線,他們的引數必須具有相同的順序和相同的型別,

乙個例外,訊號的引數多於槽的引數,多餘的引數被忽略

引數型別不匹配,或者訊號或者槽不存在,或者訊號和槽包含引數名 都會發出警告

我起先沒有注意到的一點是·:

槽也可以發射自己的訊號。通過關鍵字 emit 貌似上次漏掉了

另外這種機制不侷限於圖形使用者介面變成,可以用於任何qobject的子類中:

比如下面:

class employee:public qobject

public slots:

void setsalary(int newsalary);

signal:

void salarychanged(int newsalary);

private:

int mysalary;

};void employee::setsalary(int newsalary)

}

setsalary()槽可發射salarychanged()訊號。

下面放一張我們已經用到過的類的關係圖

22對話方塊建立

import wx 建立對話方塊 class mydialog wx.dialog 初始化 def init self 初始化父類 wx.dialog.init self,none,1,彈出的對話方塊 size 300 500 self.ok wx.button self,wx.id ok,clic...

第二章 2 2節

2.2 1 用 記號表示函式n 3 1000 100n 2 100n 3 解答 這個就很簡單了,這裡我們真正感興趣的執行時間是增長率,也就是直接控制函式影象斜率的因素。這裡就是 n 3 2.2 2 考慮排序儲存在陣列a中的n個數 首先找出a中的最小元素並將a 1 中的元素進行交換。接著,找出a中的次...

Qt學習之二 建立對話方塊

1 深入介紹訊號和槽 槽和普通的 c 成員函式幾乎是一樣的 可以是虛函式,可以被過載 可以是公有的 保護的或者私有的。槽還可以和訊號連線在一起,在這種情況下,每當發射這個訊號的時候,就會自動呼叫這個槽。connect sender,signal signal receiver,slot slot 這...