moc生成的东西的大致逻辑,如SIGNAL、SLOT的实现方法,能否告知,或者有没有资料可以参考?
SIGNAL 和 SLOT 实际是两个宏,SIGNAL 展开成 protected,SLOT 展开成空。
moc 的大致思路是,提取标注有 Q_OBJECT 宏的类中所有的 signals 和 slots,将其做成一个 uint 数组的映射,指明每个属性的相对偏移值,从而在写了 emit 的地方,将 emit 后面的信号名字替换成实际生成的函数名(我们不需要自己写 signal 的函数体,这是因为 moc 会生成对应的代码)。
这样便实现了 signal 一发,slot 便被调用(因为 Qt 从映射表中查找到 slot 的位置)。这是实现信号槽的核心。其它代码则是生成元数据,用以支持反射。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。