信号和槽用于对象间的通讯。
信号/槽机制是Qt的一个中心特征。
在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个 窗口部件。
更一般地,我们希望任何一类的对象可以和其它对象进行通讯。
较老的工具包使用一种被称作回调的通讯方式来实现同一目的。
在Qt中我们有一种可以替代回调的技术。我们使用信号和槽。
当 一个特定事件发生的时候,一个信号被发射。
Qt的窗口部件有很多预定义的信号。
槽就是一个可以被调用处理特定 信号的函数。
Qt的窗口部件又很多预定义的槽。
从QObject类或者它的一个子类 (比如QWidget类)继承的所有类可以包含信号和槽。
一个小的Qt类如下:
class Foo : public QObject
{
Q_OBJECT
public:
Foo();
int value() const { return val; }
public slots:
void setValue( int );
signals:
void valueChanged( int );
private:
int val;
};
这个类有内部状态,和公有方法来访问状态;
另外它也支持使用信号 和槽的组件编程:
这个类可以通过发射一个信号,valueChanged(),来告 诉外面的世界它的状态发生了变化,
并且它有一个槽,其它对象可以发送信号给这个 槽;
所有包含信号和/或者槽的类必须在它们的声明中提到Q_OBJECT。