Qt中信号与槽的对应关系
到目前为止,我们已经可以吧信号与槽连接在一起了。但我们还需要考虑一些其他的可能性。例如下图所示:
一个信号连接多个槽(一对多)
如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
注:当第一个信号发送到第二个信号时,第二个信号接收第一个信号并重新发送。