一、基本概念
要想了解connect() 函数,要先知道在Qt中什么是什么是信号(SIGNAL)和槽(SLOT)。
信号(SIGNAL):指在特定情况下发射的通知。比如当我们点击了用户界面的一个按钮之后就发射了一个信号。
槽(SLOT):是指对信号进行响应的函数。也就是我们点击了一个按钮后我们要实现的功能。
那么connect() 函数就是Qt 框架中用于将信号(SIGNAL)和槽(SLOT)关联起来的核心函数。
二、用法
1.旧版用法(Qt4和早期Qt5)
connect(sender, SIGNAL(signalName()), receiver, SLOT(slotName()));
- sender:发射信号的对象名称
- signalName():信号名称
- receiver:接收信号的对象名称,一般情况下为槽函数所属对象,写this即可
- slotName():槽函数名称
示例:
connect(button, SIGNAL(clicked()), this, SLOT(handleButtonClicked()));
注意: 如果信号与槽函数带参数还需要在函数括号内标出。
2.新版用法(推荐)
connect(sender, &SenderClass::signalName, receiver, &ReceiverClass::slotName);
这里引入了基于函数指针的语法,使得编译器可以进行更好的类型检查。但是这里有一个问题:与旧版的写法不同的是,信号与槽函数的参数怎么办?
首先我们知道,在 Qt 的信号与槽机制中,槽函数的参数不能多于信号的参数。也就是说,信号的参数可以多于槽的参数,且槽函数的参数必须是信号参数的一个子集。那么就可