訊號和槽機制是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 這...