开发者社区 问答 正文

moc生成的东西的大致逻辑,如SIGNAL、SLOT的实现方法,能否告知,或者有没有资料可以参考?

moc生成的东西的大致逻辑,如SIGNAL、SLOT的实现方法,能否告知,或者有没有资料可以参考?

展开
收起
OSC开源社区 2024-05-31 10:00:37 74 分享 版权
1 条回答
写回答
取消 提交回答
  • SIGNAL 和 SLOT 实际是两个宏,SIGNAL 展开成 protected,SLOT 展开成空

    moc 的大致思路是,提取标注有 Q_OBJECT 宏的类中所有的 signals 和 slots,将其做成一个 uint 数组的映射,指明每个属性的相对偏移值,从而在写了 emit 的地方,将 emit 后面的信号名字替换成实际生成的函数名(我们不需要自己写 signal 的函数体,这是因为 moc 会生成对应的代码)。

    这样便实现了 signal 一发,slot 便被调用(因为 Qt 从映射表中查找到 slot 的位置)。这是实现信号槽的核心。其它代码则是生成元数据,用以支持反射。

    2024-05-31 14:42:58
    赞同 展开评论
问答地址: