//参数说明
connect( 发射信号对象指针 , SIGNAL(发射信号的控件名(信号函数参数) , 接收信号对象指针,SLOT(接收信号控件名(信号参数))
例如: connect(findLine,SIGNAL(textChanged(QString)),this,SLOT(findFile(const QString &)));
一个信号可以连多槽
例如:
connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(updateStatusBarIndicator(int)));
slider即滑动控件当他的值变化时,valueChanged(int),发出的信号被两个槽接受spinBox ,this(当前类)。
信号和信号,槽和槽,槽和信号,他们之间是可以相互响应的。其实信号与槽的信息交换都是以函数实现的。connect()函数其实是在QObject中实现的,并不局限于GUI,只要我们继承了QOject类,就可以应用信号槽机制。
例如:
class Employee : public QObject
{
Q_OBJECT
public:
Employee() { mySalary = 0; }
int salary() const { return mySalary; }
public slots:
void setSalary(int newSalary);
signals:
void salaryChanged(int newSalary);
private:
int mySalary;
};
在使用时,我们给出下面的代码:
void Employee::setSalary(int newSalary)
{
if (newSalary != mySalary) {
mySalary = newSalary;
emit salaryChanged(mySalary);
}
}
这样,当setSalary()调用的时候,就会发出salaryChanged()信号。
注意:
1:connect是QObject的静态函数,在类外以QObject::connect( ...)形式调用
2:为了正确的连接信号槽,信号和槽的参数个数、类型以及出现的顺序都必须相同。
这里有一种例外情况,如果信号的参数多于槽的参数,那么这个参数之后的那些参数都会被忽略掉