Qt原理分析(五):Qt中信号与槽的对应关系

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

注:当第一个信号发送到第二个信号时,第二个信号接收第一个信号并重新发送。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值