QT学习之深入了解信号槽

我怕爱的太早我们不能终老 提交于 2019-12-09 19:35:04
槽函数和普通的 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 &参数就会被忽略
 
 
 
 
 
 
 
 
 
 
 
 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!