Qt 信号和槽的工作原理

📅 2026/7/7 15:12:15 👁️ 阅读次数 📝 编程学习
Qt 信号和槽的工作原理

信号和槽是 Qt 最核心的机制,本质是安全的跨对象、跨线程回调,完全基于 Qt 自己的元对象系统(MOC)实现,不是 C++ 原生语法。

我用最通俗、最底层的方式讲清楚它到底怎么工作。


一、先记住一句话

信号就是 “广播通知”,槽就是 “接收处理”,connect 就是 “订阅频道”。底层原理:MOC 预编译 + 字符串 / 函数指针映射 + 事件队列(跨线程)


二、工作流程(完整链路)

1. 编译阶段:MOC 生成代码

Qt 自带一个预处理器 MOC,它会扫描你的代码:

  • 发现类里写了Q_OBJECT
  • 发现signals:标记的函数
  • 发现slots:/public slots:标记的函数

MOC 会自动生成一份额外的 C++ 代码

  • 给信号和槽生成唯一标识(字符串 / 索引)
  • 生成信号函数的具体实现(你只声明,MOC 帮你实现)
  • 建立对象 → 信号 → 槽的映射关系

这就是为什么信号<