情景分析:
在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解决多个相同控件,但是他们的槽大致相同,避免写多个槽函数的用法。有写的不好的地方,还请指出,一起交流,共同进步!