槽函数和普通的 C++成员函数没有很大的区别。它们也可以使 virtual 的;可以被重写;可以使 public、protected 或者 private 的;可以由其它的 C++函数调用;参数可以是任何
类型的。如果要说区别,那就是,槽函数可以和一个信号相连接,当这个信号发生时,它可以被自动调用。(来自QT学习之路)
connect()语句原型
connect(sender, SIGNAL(signal), receiver, SLOT(slot));
sender 和 receiver 都是 QObject 类型的,singal 和 slot 都是没有参数名称的函数签名。SINGAL()和 SLOT()宏用于把参数转换成字符串。
一个信号也可以与多个槽连接
connect(slider, SIGNAL(valueChanged(int)),spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)),this, SLOT(updateStatusBarIndicator(int)));
这时候,槽会被一个一个调用,但是顺序是不确定的。
多个信号也可以连到一个槽
只要任意一个信号发出,槽就会被调用
一个信号也可以连接到另外一个信号
connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updateRecord(const QString &)));
当第一个信号发出时,第二个信号也被发出。除此之外信号-信号和信号-槽的形式没有区别。
槽也可以被取消链接,利用disconnect()
disconnect(lcd, SIGNAL(overflow()),this, SLOT(handleMathError()));
一般为了正确的连接槽,信号和槽的参数个数类型以及顺序要相同
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)),this, SLOT(processReply(int, const QString &)));
如果信号参数多于槽的参数,这个参数之后的那些参数会被忽略。
connect(ftp, SIGNAL(rawCommandReply(int, const QString &)), this, SLOT(checkErrorCode(int)));
这个里面的const QString &参数就会被忽略
来源:https://www.cnblogs.com/lttdxuexizhilu/p/12012963.html