QSignalMapper的简单使用

28 篇文章 2 订阅
情景分析:

在QT编程中,如果遇到多个相同控件,但是他们的槽大致相同,这个该怎么处理?

比如10个button,难道要写10个槽?

其实我们可以不必这样,QSignalMapper可以帮组我们解决问题。

解决方案:

1 首先创建控件,然后每一个button控件都与QSignalMapper 建立信号与槽函数,然后在通过QSignalMapper 对象与类对象建立信号与槽即可,我们通过类对象的槽函数来处理每一个button控件的问题

void CustomClass::init()
{
	int cnt = 10;
	QSignalMapper *signalMapper = new QSignalMapper(this);
	for (i = 0; i < cnt ; i++) {
		//此处buttonName随便写的一个变量,在具体用的时候需要指定
		button = new QPushButton(QObject::tr(buttonName));
		signalMapper->setMapping(button[i], i);
		connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
	}

    connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(onHandle(int)));
}

2 然后我们的槽里面通过index来判断每一个
void CustomClass::onHandle(int nIndex)
{
	// 表示是哪个button发生了clicked信号
	switch(nIndex) {
	case xxx:
	    doSomeThing...
	case xxx:
	    doSomeThing..
	......
	deafult:
	    break;
	}
}


以上就是通过QSignalMapper解决多个相同控件,但是他们的槽大致相同,避免写多个槽函数的用法。有写的不好的地方,还请指出,一起交流,共同进步!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值