Qt中使用信号与槽进行类与类之间的通信(值传递):(父窗口调用信号和槽触发子窗口信号的情况,见本文)
1、A类中会发射信号(子部件)
class CA{
signals:
void ASignal(quint8 pare_1,quint8 pare_2); //信号只有声明,没有定义,只是简单的传递函数
public:
void sendfunc();
};
void CA::sendfunc(){ //A中的某个函数会发射这个信号
//do sh.
emit ASignal(100,200); //发射信号
}
2、B类中接收信号(父窗口)
class CB{
CA m_send; //CA类对象 //父窗口中会定义一个子部件类对象,就如同窗口中会new QPushbutton;
slots:
reponsefunc(quint8 pare_1,quint8 pare_2); //槽函数
};
class CB::CB(){
//do sth.
//将对子窗口的操作发出信号,在父窗口中响应。 //将信号与槽函数进行关联
connect(&m_send,SIGNAL(ASignal(quint8 ,quint8)),this,SLOT(respnsefunc(qint8,qint8)));//将类A中的信号与类B中响应关联
//触发子窗口信号
m_send.sendfunc();
}
class CB::reponsefunc(quint8 pare_1,quint8 pare_2){
//do sth.
}
总结:
1)Qt中的信号与linux中的信号有点像,linux中的信号简单,不能携带大量信息,Qt中的信号也是,只是参数传递,连函数定义都没有。
2)信号的声明是在子窗口类中定义的,因为这个信号属于子窗口类;
3)信号的触发也是在子窗口类中的,需要用一个函数来包含住这触发信号;
4)如同窗口中定义QPushbutton按钮 及使用clicked()信号一样,子窗口类需要在父窗口类中先定义一个对象。