Skip to main content

定义信号

在 Qt 中存在一种特殊的成员函数,他们在一个 signals 的块下,并且不需要实现函数定义,这是 Qt 的一种重要机制,称为 信号

class Ping : public QObject {
Q_OBJECT // <-- 不要忘记这里

public:
Ping(QObject *parent = nullptr): QObject(parent) {}
~Ping() = default;

signals: // <- 关键字
void ping(); // <- 定义信号
};

这样我们就给对象定义了一个信号,信号的名称叫 ping。

在任何时候,对象都可以发出信号,只需要使用 emit 关键字,调用信号成员函数就可以了。

Ping *ping = new Ping;
emit ping->ping(); // <- 发出信号

为什么 Qt 要加信号这个功能呢?

这是 Qt 提供的订阅机制的一部分,在下一章,我会介绍另一个概念: