在Qt编程中,会遇到多个同类控件,但是它们执行的槽函数功能基本相同,比如数字键盘。这时我们就可以使用QSignalMapper解决问题。
头文件
private:
QVector<QPushButton *> numBtnVector;
QSignalMapper *numBtnMapper;
private slots:
void numBtnClicked(int key_id);
源文件
//封装到QVector容器
numBtnVector << ui->key1 << ui->key2 << ui->key3
<< ui->key4 << ui->key5 << ui->key6
<< ui->key7 << ui->key8 << ui->key9;
//关联信号映射器
numBtnMapper = new QSignalMapper(this);
for(char i=0; i<numBtnVector.size(); i++)
{
connect(numBtnVector[i], SIGNAL(clicked()), numBtnMapper, SLOT(map()));
numBtnMapper->setMapping(numBtnVector[i], i);
}
connect(numBtnMapper, SIGNAL(mapped(int)), this, SLOT(numBtnClicked(int)));
}
switch(key_id)
{
case 0:
qDebug() << "num1 clicked" << flush;
break;
case 1:
qDebug() << "num2 clicked" << flush;
break;
case 2:
qDebug() << "num3 clicked" << flush;
break;
case 3:
qDebug() << "num4 clicked" << flush;
break;
case 4:
qDebug() << "num5 clicked" << flush;
break;
case 5:
qDebug() << "num6 clicked" << flush;
break;
case 6:
qDebug() << "num7 clicked" << flush;
break;
case 7:
qDebug() << "num8 clicked" << flush;
break;
case 8:
qDebug() << "num9 clicked" << flush;
break;
default:
break;
}