Qt 自定義訊號槽

2021-08-01 22:59:56 字數 1069 閱讀 2720

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

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

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

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

//!!! qt5

#include // news*****.h

class news***** : public qobject

void send()

signals:

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

private:

qstring m_name;};

// reader.h

#include #include class reader : public qobject

void receivenews*****(const qstring & name)

}; // main.cpp

#include "reader.h"

int main(int argc, char *argv)

Qt自定義訊號槽

qt自定義訊號槽,在控制台程式中實現 qt5 如下 qt5 include news h class news public qobject void send signals void new const qstring name private qstring m name reader.h i...

QT 3 自定義訊號槽

include subwdget.h subwdget subwdget qwidget parent qwidget parent void subwdget senslot ifndef subwdget h define subwdget h include include class sub...

Qt開發學習(3)自定義訊號槽

使用 connect 可以讓我們連線系統提供的訊號和槽。但是,qt 的訊號槽機制並不僅僅是使用系統提供的那部分,還會允許我們自己設計自己的訊號和槽。訊號槽不是 gui 模組提供的,而是 qt 核心特性之一。因此,可以在普通的控制台程式使用訊號槽。經典的觀察者模式在講解舉例的時候通常會舉報紙和訂閱者的...