信号:就是一个返回值为void的函数(方法),signals为声明信号的关键字,就好像普通函数需要public、private等修饰一样
在.h文件中:
signals:
void sig(); 此为申明sig()函数为一个信号,
发送信号需要在需要的地方 emit sig(); 此为发送信号,类似普通按钮的点击操作,
槽:public slots:此为申明show()函数为一个槽
void show();
举例来说槽,比如一个按钮,点击它,它会发送一个信号,然后这个按钮的功能,或者说点击完按钮程序要执行的操作就是
槽,槽也是一个函数,函数体就是要执行的操作
connect(*p,SIGNAL(sig()),*Q,SLOT(show()));固定写法,使信号与槽链接起来,实现按钮的功能
其中*p为触发信号的指针,比如按钮,sig()是*p所触发的信号,*Q是点击按钮后程序的执行者Q指针来执行show()函数(方法)
假设按钮为p,sig()函数就是点击事件。
就像,我按电灯的开关按钮,电灯发光。开关按钮就是p,按下的动作就是sig,电灯就是Q,发光的动作就是show();
扩展:信号与槽是独立存在的,所以,他们是可以一对多,多对一,一对一实现的, 比如:
一个信号可以同时触发多个槽,例:一个开关可以同时关闭(开启)多个电灯
connect(*p,SIGNAL(sig()),*Q,SLOT(show1()));
connect(*p,SIGNAL(sig()),*Q,SLOT(show2()));
一个槽可以由多个信号来触发,例:一个电灯可以由好多个开关来关闭(开启)
connect(*p,SIGNAL(sig1()),*Q,SLOT(show()));
connect(*p,SIGNAL(sig2()),*Q,SLOT(show()));
补充:
connect(p,&QPushButton::pressed, [=]()mutable //=号表示参数,需要使用的外部全部数据,可以单独传;()中为信号的参数,mutable表示可以修改[]中的数据 { qDebug()<<"sfdsa";//{}中为槽函数执行的内容, });