本文共 1750 字,大约阅读时间需要 5 分钟。
到目前为止,我们已经可以吧信号与槽连接在一起了。但我们还需要考虑一些其他的可能性。例如下图所示:
如signal5连接了slot2和slot3。
void one_to_multi(){ qDebug() << "one_to_multi()" << endl; TestSignal t; RxClass r1; RxClass r2; t.setObjectName("t"); r1.setObjectName("r1"); r2.setObjectName("r2"); QObject::connect(&t, SIGNAL(testSignal(int)), &r1, SLOT(mySlot(int))); QObject::connect(&t, SIGNAL(testSignal(int)), &r2, SLOT(mySlot(int))); t.send(100);}
输出结果:
one_to_multi()
void mySlot(int v)
Sender: “t” Receiver: “r1” Value: 100
void mySlot(int v)
Sender: “t” Receiver: “r2” Value: 100
如signal1和signal3连接到slot1。
void multi_to_one(){ qDebug() << "multi_to_one()" << endl; TestSignal t1; TestSignal t2; RxClass r; t1.setObjectName("t1"); t2.setObjectName("t2"); r.setObjectName("r"); QObject::connect(&t1, SIGNAL(testSignal(int)), &r, SLOT(mySlot(int))); QObject::connect(&t2, SIGNAL(testSignal(int)), &r, SLOT(mySlot(int))); t1.send(101); t2.send(102);}
输出结果:
multi_to_one()
void mySlot(int v)
Sender: “t1” Receiver: “r” Value: 101
void mySlot(int v)
Sender: “t2” Receiver: “r” Value: 102
如signal4连接到signal6再连接到slot4
void signal_to_signal(){ qDebug() << "signal_to_signal()" << endl; TestSignal t1; TestSignal t2; RxClass r; t1.setObjectName("t1"); t2.setObjectName("t2"); r.setObjectName("r"); QObject::connect(&t1, SIGNAL(testSignal(int)), &t2, SIGNAL(testSignal(int))); QObject::connect(&t2, SIGNAL(testSignal(int)), &r, SLOT(mySlot(int))); t1.send(101); t2.send(102);}
输出结果:
signal_to_signal()
void mySlot(int v)
Sender: “t2” Receiver: “r” Value: 101
void mySlot(int v)
Sender: “t2” Receiver: “r” Value: 102
注:当第一个信号发送到第二个信号时,第二个信号接收第一个信号并重新发送。
转载地址:http://shhsi.baihongyu.com/