alin的学习之路:Qt的信号槽机制注意事项
1. 必须继承QObject类
要使用Qt中的信号槽机制,必须继承QObject类,还需要在类的定义中的第一行写上一个宏Q_OBJECT
class MyTest : public QObject
{
Q_OBJECT // 没有这个宏, 信号槽机制还是不能使用
...
}
如果没有直接继承QObject,而是继承了一些继承QObject类的其他类也可以,比如QWidget类是QObject的子类,再有个类继承QWidget也能使用信号槽的机制。
2. 信号的中转
当两个类A和B之间没有任何联系时,如果想要使用信号槽的机制,则需要借助一个和A类有关联,也和B类有关联的C类来进行信号的中转。
比如:当C类达到一定条件时会触发一个信号c,A类收到这个信号c会完成一系列操作。如果B类与A类没有联系时,可以使用信号中转的方法,当B类达到一定条件的时候,触发一个信号b,C类收到信号b会发送信号c,A类收到c会完成一些操作。此时完成了信号的中转。
connect(C, C::c, A, [](){});
connect(B, B::b, C, C::c);