这一节说一些理论的东西吧,聊一聊这QT的一个重要组成部分,那就是信号和槽。这个机制可以再对象之间并不了解的情况下将他们的行为联系起来。前面的几篇文章中已经用到过连接信号和槽了,声明控件自己的信号和槽,并实现了槽函数,发送信号。现在咱再聊聊这个机制。
槽的话,大家可以看成一个成员函数(其实和成员函数不一样,这样说为了初学者容易理解),可以使虚函数,可以被重载。可以定义为公有,可以为私有,也可以为保护。它可以像C++的成员函数一样被调用,可以传递任何类型的参数。注意的是,槽函数能和一个信号连接,只要信号发出,这个槽函数会自动调用。
看看语法吧,connect语法:
connect(sender,SIGNAL(signal),receiver,SLOT(slot));
其中sender和receiver是QObject对象指针。还有一些要注意的是,一个信号可以连接到多个槽,多个信号可以连接一个槽,一个信号可以和另一个信号连接。
1、一个信号可以连接到多个槽
connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));
connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updataStatusBarIndicator(int)));
2、多个信号可以连接一个槽
connect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError));
connect(calculator,SIGNAL(divisionByZero(),this,SLOT(handleMathError)));
3、一个信号和另一个信号连接
connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SIGNAL(updateTecord(const QString &)));
好吧,今天就少说一点吧!