Qt使用connect函数时向slot传递参数

28 篇文章 4 订阅

设想这样一种场景:共有5个button,button1~button5,点击button1时输出“button 1 clicked”,点击button2时输出“button 2 clicked”,该如何实现呢?
最粗暴的实现是写5个slot,然后将button与slot分别connect,但这明显会增加许多重复代码,不是一种好的实现。
一种比较好的方式是使用QSignalMapper,它可以接收无参数的signal,然后重新发射出有参数的signal,这些参数的类型可以是int、QString、QWidget *或QObject *:

QSignalMapper *signalMapper = new QSignalMapper(this);

connect(button1, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(button2, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(button3, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(button4, SIGNAL(triggered()), signalMapper, SLOT(map()));
connect(button5, SIGNAL(triggered()), signalMapper, SLOT(map()));

signalMapper->setMapping(button1, 1);
signalMapper->setMapping(button2, 2);
signalMapper->setMapping(button3, 3);
signalMapper->setMapping(button4, 4);
signalMapper->setMapping(button5, 5);

connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(printMsg(int)));

然后在printMsg(int)中根据不同的输入参数输出信息即可。
可参考https://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot


转发请注明来源http://blog.csdn.net/imred

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值