信号和槽

来源:互联网 发布:linq.js where 编辑:程序博客网 时间:2024/05/17 09:33

信号和槽

connect(sender, SIGNAL, receiver, SLOT(slot));

这里的sender和receiver是指向QObject指针,signal和slot是不带参数的函数名。
1. 一个信号可以连接多个槽
connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));//在发射这个信号时,会以不确定的顺序一个接一个地调用这些槽。
2. 多个信号可以连接同一个槽
connect(lcd, SIGNAL(overflow()),this, SLOT(handMathError()));
3.一个信号可以与另外一个信号连接

connect(lineEdit, SIGNAL(textChanged(const QString&)), this, SIGNAL(updateRecord(const QString&)));

//当发射第一个信号时, 也会发射第二个信号。除此之外,信号与信号之间的连接和信号与槽之间的连接是难以区分的。
4.连接可以被移除

disconnect(lcd, SIGNAL(overflow()), this, SLOT(handledMathError()));

要把信号成功连接到槽(或者连接到另外一个信号),它们的参数必须具有相同的顺序和相同的类型

connect(ftp, SIGNAL(rawCommandReply(int ,const QString&)), this, SLOT(processReply(int ,const QString&));

这里有个例外, 如果信号的参数比它所连接的槽的参数多,那么多余的参数将会被简单地忽略掉:

connect(ftp, SIGNAL(rawCommandReply(int, const QString&)), this, SLOT(checkErrorCode(int)));