用于信号管理,适用于在一些控件较多的情况下。比如说一排按钮的情况下进行使用。
接收者由目标槽函数转变为QSignalMapper,然后通过参数(整数或者字符串)来进行区分处理。
QSignalMapper *signalMapper = new QSignalMapper(this);
for (i = 0; i < 10; i++) {
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(handle(int)));
然后我们的槽可以这样写
void handle(int)
{
swich(int){
....
}
}
如果说控件有名字
可以使用字符串,同时便于理解
signal_mapper->setMapping(page_button, page_button->text());
connect(signal_mapper, SIGNAL(mapped(QString)), this, SLOT(handle(QString)));
//处理:
void SkinWidget::handle(QString current_skin)
{
if(current_skin == "first")
{
//...
}
else if(current_skin == "previous")
{
//...
}
}