一:标准信号与槽
connect(信号发送者,发送的信号,信号接收者,槽函数执行);
二:lambda表达式
connect(信号发送者,信号,
[=](信号参数列表){
if( pbtn2->text() == "是")
pbtn2->setText("否");
else
pbtn2->setText("是");
});
优点: 能直接对窗口中的控件做操作
三: 自定义槽函数
public slots:
void mySlot();
在cpp文件中实现功能
四: 自定义信号
示例: 父窗口子窗口切换
子窗口中:
signals: //自定义信号(只声明,不实现)
void mySignal();
public slots: //自定义槽函数
void mySlot();
//父窗口含有子窗口的对象指针,父窗口能让子窗口做事情,但是子窗口不能让父窗口做事情,这就是为什么需要子窗口发信号 emit 信号; //发送信号函数
void childMainWindow::mySlot(){
//槽函数中发信号
emit mySignal();
}
//父窗口中创建一个子窗口对象
childMainWindow* pchildWnd; //创建一个子窗口对象
槽函数执行隐藏父窗口,显示子窗口
父窗口->hide() 子窗口->show()
槽函数执行,显示父窗口,隐藏子窗口
connect(子窗口对象,子窗口发送的信号,父窗口对象,槽函数);
子窗口->hide() 父窗口->show()
注: 注意信号与槽函数的参数需要一致,还有二义性问题(需用函数指针限定)
//void (*pFunc)( )=func( )
限定信号参数
void (子类名::*pFunc)(参数类型列表)=子窗口发送的信号
QT4方法解决
connect(信号发送者,SIGNAL(信号(参数类型列表)),信号接受者,SLOT(槽函数(参数类型列表)));
注: 因为qt4使用的是宏,不做语法检查,只是做函数替换