C++,观察者模式,模拟Qt的信号和槽机制

运行在VS2022,x86,Debug下

33. 模拟Qt信号和槽机制

  • 信号与槽实现原理:观察者模式,即当一个对象被修改时,就会自动通知依赖它的对象。
  • 应用:对象间的通信。
  • Qt实现信号与槽,代码如下。
#include <QObject>//发送者
class Sender : public QObject 
{Q_OBJECT  //必须在类声明中包含这个宏public:signals: void signal();  //声明信号void sendSignal()  //发射信号{emit signal(); //通过emit关键字发射信号}
};// 接收者
class Receiver : public QObject 
{Q_OBJECTpublic slots:void handleSignal() // 槽函数,处理信号{qDebug() << "Signal received";}
};int main() {Sender sender;Receiver receiver;// 将信号与槽连接起来QObject::connect(&sender, &Sender::signal, &receiver, &Receiver::handleSignal);// 发射信号sender.sendSignal();return 0;
}
  • C++模拟实现信号与槽,代码如下。
    通过将函数指针传递给另一个函数,该函数可以在需要时通过该指针调用相应的函数,实现回调的效果。
using SlotType = void(*)(void*); //定义槽函数指针类型,参数是void*,接收任意类型的数据// 发送者
class Sender 
{
private:vector<SlotType> slots;       //槽函数列表public:void connect(SlotType slot)   //连接信号与槽{ slots.emplace_back(slot); //将槽函数指针添加到槽列表中}void sendSignal(void* data)  //发射信号{for (auto&& slot : slots)slot(data);     //调用所有已连接的槽函数} 
};// 接收者
class Receiver 
{
public:static void handleSignal(void* data)  //槽函数,处理信号{cout << "Signal received: " << *static_cast<int*>(data) << endl; }
};int main() {Sender sender;//将信号与槽连接起来sender.connect(&Receiver::handleSignal);//发射信号int signalData = 42;sender.sendSignal(&signalData); return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用vite从0开始搭建vue项目

使用Vite从0开始创建vue项目 第一步&#xff1a;创建项目目录 mkdir vue-demo -创建目录 cd vue-demo --进入项目 npm init -y --生成package.json文件 第二步&#xff1a;安装vite、typescript--ts、vue、vitejs/plugin-vue--对单文件组件、热重载、生产优化的支持 pnpm…

“三夏”农忙:EasyCVR/EasyDSS无人机技术助推现代农业走向智能化

随着科技的飞速发展&#xff0c;无人机技术已经逐渐渗透到我们生活的方方面面。其中&#xff0c;无人机在农业领域的应用尤为引人注目。它们不仅提高了农业生产的效率&#xff0c;还为农民带来了更便捷、更智能的种植方式。 无人机在农业应用场景中&#xff0c;通过搭载各种设备…

DeepSpeed入门

pip install deepspeed 支持transformers: --deepspeed&#xff0c;以及config文件&#xff1b; model_engine, optimizer, _, _ deepspeed.initialize(argscmd_args,modelmodel,model_parametersparams) 分布式和mixed-precision等&#xff0c;都包含在deepspeed.initialize和…

【数据结构】 -- 堆 (堆排序)(TOP-K问题)

引入 要学习堆&#xff0c;首先要先简单的了解一下二叉树&#xff0c;二叉树是一种常见的树形数据结构&#xff0c;每个节点最多有两个子节点&#xff0c;通常称为左子节点和右子节点。它具有以下特点&#xff1a; 根节点&#xff08;Root&#xff09;&#xff1a;树的顶部节…

Python有什么功能:探索Python的无限可能

Python有什么功能&#xff1a;探索Python的无限可能 Python&#xff0c;作为一种强大且灵活的编程语言&#xff0c;已经深入到各个领域&#xff0c;展现出其独特的功能和魅力。那么&#xff0c;Python究竟有哪些令人惊叹的功能呢&#xff1f;让我们一起揭开这个神秘的面纱。 …

电脑回收站清空了怎么恢复回来?分享四个好用数据恢复方法

电脑回收站清空了还能恢复回来吗&#xff1f;在使用电脑过程中&#xff0c;很多小伙伴都不重视电脑的回收站,&#xff0c;有用的没用的文件都往里堆积。等空间不够的时候就去一股脑清空回收站。可有时候会发现自己还需要的文件在回收站里&#xff0c;可回收站已经被清空了……那…

解决Python使用GPU

在Python中使用GPU进行计算通常涉及到一些特定的库&#xff0c;如NumPy、SciPy的GPU加速版本&#xff08;如CuPy、PyCUDA等&#xff09;或深度学习库&#xff08;如TensorFlow、PyTorch等&#xff09;。这些库能够利用GPU进行并行计算&#xff0c;从而加速数据处理和模型训练等…

2024.6.9 六

Python内置库OS 在使用前要引入 import os相关函数 os.getcwd() 获取当前工作目录 os.listdir(path) 返回一个包含指定路径下文件(或文件夹)名字的列表 os.mkdir(path) 在指定path下创建一个文件夹,名字包含在路径里了,存在就报错 os.makedirs(path) 创建多级文件夹 os.rmdi…

【xilinx】vivado提示No common node between related clocks,什么意思,需要改动设计吗

Vivado 提示 "No common node between related clocks" 通常指的是在进行时序分析时&#xff0c;Vivado 工具无法找到一个共同的节点&#xff08;例如&#xff0c;寄存器或内存元素&#xff09;来关联两个时钟域中的时钟。这可能发生在跨时钟域的设计中&#xff0c;其…

Web前端动画插件:探索、比较与实用指南

Web前端动画插件&#xff1a;探索、比较与实用指南 在Web前端开发中&#xff0c;动画插件是提升用户体验和增强界面吸引力的关键工具。本文将从四个方面、五个方面、六个方面和七个方面深入探讨Web前端动画插件&#xff0c;为您提供一份实用的指南。 四个方面&#xff1a;动画…

YoloV9改进策略:主干网络篇|MobileNetV4主干替换YoloV9的BackBone(独家原创)

摘要 今年&#xff0c;轻量级王者MobileNetV4闪亮登场&#xff01;在我们这篇文章里&#xff0c;我们把MobileNetV4加入到了YoloV9中&#xff0c;对MobileNetV4的层数和卷积层核做了适当的修改&#xff0c;然后替换原有的BackBone。哈哈&#xff0c;你猜怎么着&#xff1f;效果…

1数据库网课笔记

文章目录 前言知识点一些复习的想法考试题型分布 前言 自己真是服了自己了&#xff0c; 23 23 23 讲的网课没看多少&#xff0c;速成的网课貌似看了两个了&#xff0c;但也是走马观花看的&#xff0c;现在离期末考试还有二十多天&#xff0c;按道理说时间也还算充足&#xff…

Docker基本架构概览-1

Docker基本架构概览 Docker架构 Docker采用客户端-服务器&#xff08;C/S&#xff09;架构&#xff0c;主要组件包括&#xff1a; Docker Client 用户与Docker交互的接口&#xff0c;发送命令到Docker守护进程。 Docker Daemon 运行在后台&#xff0c;接收并处理Docker客户端…

基于JSP的医院远程诊断系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; JSP Servlet JSPBean 工具&#xff1a; IDEA/Eclipse、Navica…

UltraScale+系列模块化仪器,可以同时用作控制器、算法加速器和高速数字信号处理器

基于 XCZU7EG / XCZU4EG / XCZU2EG • 灵活的模块组合 • 易于嵌入的紧凑型外观结构 • 高性能的 ARM Cortex 处理器 • 成熟的 FPGA 可编程逻辑 &#xff0c;基于 IP 核的软件库 基于 Xilinx Zynq UltraScaleMPSoC 的 FPGA 技术&#xff0c;采用 Xilinx Zynq UltraScale&a…

BGP属性2

4、AS-PATH BGP的路由条目在传递过程中&#xff0c;记录所有经过过的AS号&#xff1b; 优选经过的AS数量较少的路径&#xff1b; 人为的在BGP路由条目中&#xff0c;增加AS-PATH数量&#xff0c;可以做到干涉选路&#xff1b; 但增加AS号也能在EBGP邻居关系间配置&#xff…

Mysql基础进阶速成2

看着篇文章之前先看我的前一章&#xff1a;MySQL基础进阶速成1 函数&#xff1a; 每个字段使用一个函数&#xff1a;select 函数(字段名)from 表名 upper&#xff1a;将字符串中的字母大写 lower&#xff1a;将字符串中的字符小写 max&#xff1a;得到最大值 min&#xf…

Python进阶之-mmap详解

✨前言&#xff1a; Python中的mmap模块允许你创建一个内存映射的文件&#xff0c;这意味着文件数据直接映射到虚拟内存。这样做的好处包括&#xff1a;提高文件访问速度、可通过修改内存来修改文件、可以像操作普通内存一样操作这块特殊的内存区域。 ✨mmap基础 要使用mmap…

嵌入式仪器模块:音频综测仪和自动化测试软件

• 24 位分辨率 • 192 KHz 采样率 • 支持多种模拟/数字音频信号的输入/输出 应用场景 • 音频信号分析&#xff1a;幅值、频率、占空比、THD、THDN 等指标 • 模拟音频测试&#xff1a;耳机、麦克风、扬声器测试&#xff0c;串扰测试 • 数字音频测试&#xff1a;平板电…

高考志愿填报:大学学什么专业比较好呢?

准高三一枚&#xff0c;比较迷茫&#xff0c;求推荐一些专业以后比较好就业&#xff0c;发展前景较好的。听说互联网行业比较吃香&#xff0c;有想过以后做运营这一块&#xff0c;但是不知道应该在大学选什么专业&#xff0c;求推荐吧&#xff01; 学什么专业好&#xff1f; 这…