信号和槽是qt编程的基础,在qt中关联信号和槽用到的是
QObject::connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection);
其中的sender,receiver都是指向CObject的指针,signal和loat都是函数名 。
在使用中有一些值得注意的地方。比如:
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
// WRONG
QObject::connect(scrollBar, SIGNAL(valueChanged(int value)),
label, SLOT(setNum(int value)));
函数的形参不能带有变量名,当带有变量名的时候就会出错,return false;
信号和槽连接的可能性:
1.一个信号可以连接多个槽
connect(slider , SIGNAL(valueChanged(int)) , spinbox , SLOT(setValue(int)) );
connect(slider , SIGNAL(valueChanged(int)) , this , SLOT(updateStatusBarIndicator(int)) );
当发送这个信号的时候,会以不确定的顺序一个接一个的调用这些槽
2.多个信号连接同一个槽
connect(slider , SIGNAL(valueChanged(int)) , this , SLOT(updateStatusBarIndicator(int)) );
connect(lcd , SIGNAL(valueChanged(int)) , this , SLOT(updateStatusBarIndicator(int)) );
3.一个信号连接另外一个信号
connect(lineedit , SIGNAL(textChanged(const QString& ) ) , this , SIGNAL(updateRecord(const QString &)));
当发射第一个信号的时候,也会发射第二个信号
4.信号的移除
bool QObject::disconnect(const QObject * sender, const char * signal, const QObject * receiver, const char * method);
这种情况很少使用,就不做介绍了