<b>Qt学习之路(9):深化理解信号槽</b>[VC/C++编程]
本文“<b>Qt学习之路(9):深化理解信号槽</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
槽函数和普通的C++成员函数没有很大的辨别.它们也可以使virtual的;可以被重写;可以使public、protected大概 private的;可以由别的的C++函数调用;参数可以是任何范例的.假如要说辨别,那就是,槽函数可以和一个信号相衔接,当这个信号发生时,它可以被自动调用.
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(lcd, SIGNAL(overflow()),
this, SLOT(handleMathError()));
connect(calculator, SIGNAL(divisionByZero()),
this, SLOT(handleMathError()));
这是说,只要肆意一个信号发出,这个槽就会被调用.
一个信号可以衔接到别的的一个信号:
connect(lineEdit, SIGNAL(textChanged(const QString &)),
this, SIGNAL(updateRecord(const QString &)));
这是说,当第一个信号发出时,第二个信号被发出.除此之外,这种信号-信号的情势和信号-槽的情势没有什么辨别.
槽可以被撤消链接:
disconnect(lcd, SIGNAL(overflow()),
this, SLOT(handleMathError()));
这种情形并不常常呈现,因为当一个对象delete之后,Qt自动撤消全部衔接到这个对象上面的槽.
为了精确的衔接信号槽,信号和槽的参数个数、范例以及呈现的次序都必须相同,比方:
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 &这个参数就会被槽忽视掉.
以上是“<b>Qt学习之路(9):深化理解信号槽</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |