quit() 插槽。那么一个用户点击退出键将使应用程序终止运行。上述的连接过程用代
码写出来就是这样
connect( button, SIGNAL(clicked()), qApp, SLOT(quit()) );
我们可以在Qt应用程序的执行过程中增加或是减少信号与插槽的连接。
信号与插槽的实现扩展了C++的语法,同时也完全利用了C++面向对象的特征。信号
与插槽可以被重载或者重新实现,它们可以定义为类的公有,私有或是保护成员。
2.2.1 信号与插槽的例子
如果一个类要使用信号与插槽机制,它就必须是从QObject或者QObject的子类继承,而
且在类的定义中必须加上Q_OBJECT宏。信号被定义在类的信号部分,而插槽则定义在public
slots, protected slots 或者 private slots 部分。
下面定义一个使用到信号与插槽机制的类。
class BankAccount : public QObject
{
Q_OBJECT
public:
BankAccount() { curBalance = 0; }
int balance() const { return curBalance; }
public slots:
void setBalance( int newBalance );
signals:
void balanceChanged( int newBalance );
private:
int curBalance;
};
和大部分的C++的类一样,BankAccount类有一个构造函数,还有一个取值的函数
balance(),一个设置值的函数setBalance( int newBalance )。
这个类有一个信号balanceChanged(),这个信号声明了它在BankAccount类的成员
curBalance的值被改变时产生。信号不需要被实现,当信号被激发时,和该信号连接的插槽
将被执行。
上面用来设置值的函数 setBalance( int newBalance )定义在类的“public slots”
部分,因此它是一个插槽。插槽是一个需要实现的标准的成员函数,它可以像其它函数一样
被调用,也可以和信号相连接。
下面就是该插槽函数 setBalance( int newBalance )的实现代码:
void BankAccount::setBalance( int newBalance )
{
if ( newBalance != curBalance )
{
curBalance = newBalance;
emit balanceChanged( curBalance );
}
}