訊號槽初步2

2021-09-07 05:54:40 字數 1286 閱讀 8967

上一節我們詳細分析了connect()函式。使用connect()可以讓我們連線系統提供的訊號和槽。但是,qt 的訊號槽機制並不僅僅是使用系統提供的那部分,還會允許我們自己設計自己的訊號和槽。這也是 qt 框架的設計思路之一,用於我們設計解耦的程式。本節將講解如何在自己的程式中自定義訊號槽。

訊號槽不是 gui 模組提供的,而是 qt 核心特性之一。因此,我們可以在普通的控制台程式使用訊號槽。

經典的觀察者模式在講解舉例的時候通常會舉報紙和訂閱者的例子。有乙個報紙類news*****,有乙個訂閱者類subscribersubscriber可以訂閱news*****。這樣,當news*****有了新的內容的時候,subscriber可以立即得到通知。在這個例子中,觀察者是subscriber,被觀察者是news*****。在經典的實現**中,觀察者會將自身註冊到被觀察者的乙個容器中(比如subscriber.registerto(news*****))。被觀察者發生了任何變化的時候,會主動遍歷這個容器,依次通知各個觀察者(news*****.notifyallsubscribers())。

下面我們看看使用 qt 的訊號槽,如何實現上述觀察者模式。注意,這裡我們僅僅是使用這個案例,我們的**並不是去實現乙個經典的觀察者模式。也就是說,我們使用 qt 的訊號槽機制來獲得同樣的效果。

news*****.h

#ifndef news*****_h

#define news*****_h

#includeclass news*****: public qobject

void send()

signals:

void new*****(qstring &name);

private:

qstring m_name;

};#endif // news*****_h

#ifndef reader_h

#define reader_h

#include #include class reader : public qobject

void receive(const qstring & name)

};#endif // reader_h

#include "mainwindow.h"

執行結果:

C 資訊槽 訊號槽

訊號槽作用 1 可以將事件源和訂閱處理者分開 2 降低耦合性,事件源只需要向外界暴露最少的資訊,內部改變不影響外部行為 3.降低 複雜性,將事件不同的處理 分散到各個訂閱者內部。使用資訊槽 1 包含標頭檔案,include sigslot.h using namespace sigslot 2 在事...

訊號槽系統

訊號槽 乙個物件 sender 上由於某件事情的發生而廣播乙個訊號 signal 通過connect函式進行連線,另乙個物件 receiver 可以接收這個訊號並呼叫乙個槽函式 slot 作為響應。connect函式的基本形式 qobjectconnect sender,signal,receive...

QT學習筆記(2) 訊號與槽

1 moc 元物件 系統簡介 在 qt 助手的索引裡面輸入 the meta object system 就可以看到元物件系統的英文文件。現在將其主要的內容描述如下 qt 元物件系統實現了物件之間通訊機制 訊號和槽,並提供了執行時型別資訊和動態屬性系統。元物件系統是 qt 類庫獨有的功能,是 qt ...