Qt 自定义信号槽
来源:互联网 发布:Mac大括号怎么打 编辑:程序博客网 时间:2024/05/22 16:53
使用 connect() 可以让我们连接系统提供的信号和槽。但是,Qt 的信号槽机制并不仅仅是使用系统提供的那部分,还会允许我们自己设计自己的信号和槽。这也是 Qt 框架的设计思路之一,用于我们设计解耦的程序。本节将讲解如何在自己的程序中自定义信号槽。
信号槽不是 GUI 模块提供的,而是 Qt 核心特性之一。因此,我们可以在普通的控制台程序使用信号槽。
经典的观察者模式在讲解举例的时候通常会举报纸和订阅者的例子。有一个报纸类 Newspaper,有一个订阅者类 Subscriber。Subscriber 可以订阅 Newspaper。这样,当 Newspaper 有了新的内容的时候,Subscriber 可以立即得到通知。在这个例子中,观察者是 Subscriber,被观察者是 Newspaper。在经典的实现代码中,观察者会将自身注册到被观察者的一个容器中(比如 subscriber.registerTo(newspaper))。被观察者发生了任何变化的时候,会主动遍历这个容器,依次通知各个观察者(newspaper.notifyAllSubscribers())。
下面我们看看使用 Qt 的信号槽,如何实现上述观察者模式。注意,这里我们仅仅是使用这个案例,我们的代码并不是去实现一个经典的观察者模式。也就是说,我们使用 Qt 的信号槽机制来获得同样的效果。
//!!! Qt5#include <QObject> ////////// newspaper.hclass Newspaper : public QObject{ Q_OBJECTpublic: Newspaper(const QString & name) : m_name(name) { } void send() { emit newPaper(m_name); } signals: void newPaper(const QString &name); private: QString m_name;}; ////////// reader.h#include <QObject>#include <QDebug> class Reader : public QObject{ Q_OBJECTpublic: Reader() {} void receiveNewspaper(const QString & name) { qDebug() << "Receives Newspaper: " << name; }}; ////////// main.cpp#include <QCoreApplication> #include "newspaper.h"#include "reader.h" int main(int argc, char *argv[]){ QCoreApplication app(argc, argv); Newspaper newspaper("Newspaper A"); Reader reader; QObject::connect(&newspaper, &Newspaper::newPaper, &reader, &Reader::receiveNewspaper); newspaper.send(); return app.exec();}
阅读全文
0 0
- Qt自定义信号槽
- Qt自定义信号槽
- Qt 自定义信号槽
- Qt自定义信号和槽
- Qt自定义信号和槽
- Qt自定义信号和槽
- Qt 自定义信号与槽
- Qt 自定义 信号与槽
- QT 自定义信号和槽
- QT 自定义函数 自定义信号和槽
- QT 自定义函数 自定义信号和槽
- QT 自定义函数 自定义信号和槽
- QT中自定义的信号和槽
- VS2008 Qt Designer 中自定义信号槽
- VS2008 Qt Designer 中自定义信号槽
- qt学习_自定义信号与槽
- QT 学习之路--自定义信号槽
- C++--Qt软件开发--自定义信号槽
- delphi指针函数
- Python下opencv的使用---二值化
- 视图+视图定义+创建视图+视图的表结构+创建视图的语句+查看视图哪些列是可以进行DML操作
- map、mapPartitions、mapValues、mapWith、flatMap、flatMapWith、flatMapValues
- Vue全家桶+Mint-Ui打造高仿QQMusic,搭配详细说明
- Qt 自定义信号槽
- jQuery基础第二天:选择器 事件处理函数
- 视频带宽计算公式(码流_分辨率_帧率)
- Redis探索之旅(1)- Redis初识
- Java二分法查找实现
- 获取src/main/resources下文件的绝对路径
- 典型数据库架构设计与实践 | 架构师之路
- Spark Scheduler模块源码分析之DAGScheduler
- java自动运行任务job---quartz的运用