2020-11-23 信号与槽细节及思想

问题:猫和老鼠问题,猫一叫,老鼠要逃跑

提出了一种对象间的通信机制,这种机制,要能够给两个对象间的函数建立映射关系。前者被调用时候,后者能够自动调用。


1:回调函数+映射表

std::map> callback;

建立映射关系和调用功能  封装一个connection类  这个类需要存在于上下文环境中,可以这样写。


2:观察者模式 =发布订阅模式

引出了信号与槽的机制

3: MOC工具 OOBject宏 展开后是发现里面声明了一个只读的静态成员变量staticMetaObject以及三个public成员函数。 声明的这些函数在moc.cpp里面进行了实现。称为定义。

staticmetaobject是一个结构体。成员字符串存储了该对象的信号与槽等元信息。然后截取出来; 存放的时候以数组形式存放的。

connection成员对象 

映射 反射  传入字符串 返回实例。

在 信号miao函数里面 将直接调用QMetaObject::activte。去找出当前信号连接的所有的对象-槽函数。

常用元类型已经注册了,自定以的需要进行一个注册;qregisterMetaType();

x新版本的connect使用了取成员函数指针的方法,少去了字符串查找过程。


connect过程: 1:参数校验判空 2:拿到发送者元对象3:获取当前这个对象的信号索引 校验,3:拿到接收者对象,并获取到当前对象的槽索引,4:绑定 connection 被创建了,插入到一个队列了 双向链表+数组存储

connectionlists 属于每个对象,是一个数组,按照信号索引

进行存储;找出当前对象信号连接的所有对象-槽函数,再逐个处理

你可能感兴趣的:(2020-11-23 信号与槽细节及思想)